سوال حرفه ای در باره ورود کاربران در php

k2-4u

Well-Known Member
من یک اسکریپ ساده برای ورود کاربران ثبت شده در دیتا بیس درست کردم که با جلسه یا session کار می کنه
می خوام ببینم از روش امینی استفاده کردم یا نه اگر هم بهترین روش رو برای این کار به من بگید خیلی ممنون
می شم
(این سیستم برای ورود چندین کاربر با یوزر و پسورد های مختلف است )
این کد برای لوگین است
PHP:
<?
session_start();
	
	function checklogin($username,$password)
	{
		$password=md5($password);
		$sql="SELECT username,password from usertable where username='$username' and password='$password'";
		$qy = mysql_query($sql1);
		while($row1 = mysql_fetch_assoc($qy))
		{
			if(($username == $row1['username']) AND ($password == $row1['password']))
			{
				if($_SESSION['useradmin']= $username)
				{
					echo "<script> window.location.href = 'mainpage.php'; </script>";
					exit();
				}			
			}
		}
	}
?>

صفحه ای که به کاربر بعد از لوگین نمایش داده می شه

PHP:
<?
session_start();

$sql = "SELECT username  FROM usertable";
$qy = mysql_query($sql);
while ($row  = mysql_fetch_assoc($qy))
{
	if ($_SESSION['useradmin'] == $row['username'])
	{
		?>
		************ HTML CODE ************
		<?
	}
}
?>

و برای خروج از سیستم

PHP:
if($_GET['action'] == "logout")
{
	session_destroy();
	echo "LogOut succsesfuly End !!";
	exit();
}
 

ziXet

مدیر انجمن PHP/MYSQL
برای check login لازم نیست حلقه while بذاری چون فقط یه کابر با آی دی و پسورد خاص داری!
تو همون تابع باید تعریف کنی که اگه پسورد یا یوزر اشتباه بود چی کار کنه مثلا return false کنه
 

iroweb

Member
به نظر من خيلي پيچيدش كردي . براي چك كردن فقط يوزر و پس رو چك كن بعد بگو اكر وجود داشت ( توسط تابع num ) جلسه رو بده به اون يوزر و گرنه هيچي .


همين .
 

k2-4u

Well-Known Member
خیلی ممنون برای صفحه ای که بعد از لوگین نمایش داده می شه باید چی کار کنم؟؟
 

peyman1987

Member
شما ميتوني صفحه کاربري رو که بعد از لاگين ميخواي طراحي کني رو بصورت عادي طراحي کني و فقط اين سطر رو بالاي تگ <html> قرار بدي.
کد:
IF(!ISSET($_SESSION['useradmin']))
HEADER("Location: Login.php");

با اينکار اگه لاگين نکرده باشه برميگرده به صفحه لاگين و ديگه نيازي نيست صفحه‌ت رو داخل حلقه طراحي کني.
 

ziXet

مدیر انجمن PHP/MYSQL
شما ميتوني صفحه کاربري رو که بعد از لاگين ميخواي طراحي کني رو بصورت عادي طراحي کني و فقط اين سطر رو بالاي تگ <html> قرار بدي.
کد:
IF(!ISSET($_SESSION['useradmin']))
HEADER("Location: Login.php");

با اينکار اگه لاگين نکرده باشه برميگرده به صفحه لاگين و ديگه نيازي نيست صفحه‌ت رو داخل حلقه طراحي کني.
Peyman درست گفت ولی اگه برای ورود به هر صفحه پسورد و یوزر رو چک کنی امنیتش بالاتر میره.
 
شما ميتوني صفحه کاربري رو که بعد از لاگين ميخواي طراحي کني رو بصورت عادي طراحي کني و فقط اين سطر رو بالاي تگ <html> قرار بدي.
کد:
IF(!ISSET($_SESSION['useradmin']))
HEADER("Location: Login.php");

با اينکار اگه لاگين نکرده باشه برميگرده به صفحه لاگين و ديگه نيازي نيست صفحه‌ت رو داخل حلقه طراحي کني.

سلام ،
اين كار جالبى نيست ، چون خيلى آسون ميشه روى سرور session ريجيستر كرد اون هم با هر نام و مقدارى ، بهتره براى صفحات داخلى يه كلاس تعريف كنى ، بعد هم اون كلاس رو ابتداى فايلها فراخوان كنى مثل اين :

PHP:
	class login{
		function login(){
			$this->Log_SEL = Mysql_Query ( "SELECT `user`,`password` FROM `login` WHERE `user` = '".$_SESSION["SESUSER"]."' and `password` = '".$_SESSION["SESPASS"]."' " );
			$this->Log_FET = Mysql_fetch_assoc ( $this->Log_SEL );
			if ( Empty($this->Log_FET['user']) or $this->Log_FET['user'] != $_SESSION["SESUSER"] or Empty($this->Log_FET['password']) or $this->Log_FET['password'] != $_SESSION["SESPASS"] ){
				header ("Location: login");
		
			}
		}
	}
اين هم فراخوانى :
PHP:
$pointer = new login();
 

ziXet

مدیر انجمن PHP/MYSQL
این هم روشی است که بخوای سشن ها تو دیتابیس ذخیره کنی و برای پروژه های خیلی بزرگ خوبه.
ولی رجیستر کردن سشن رو سرور هم کار همچین آسونی نیست یعنی از طریق عادی تقریبا میشه گفت محاله!
 

peyman1987

Member
منم با شاه کليد موافقم شما به چه طريقي ميتونين به اين راحتي روي سرور سشن رجيستر کنين؟:shock::shock:
اگه قرار بود همچين کاري بشه که ديگه امنيت کل وب زير سوال ميرفت.:eek::eek:
 
سلام ،
اين كار جالبى نيست ، چون خيلى آسون ميشه روى سرور session ريجيستر كرد اون هم با هر نام و مقدارى ، بهتره براى صفحات داخلى يه كلاس تعريف كنى ، بعد هم اون كلاس رو ابتداى فايلها فراخوان كنى مثل اين :

PHP:
	class login{
		function login(){
			$this->Log_SEL = Mysql_Query ( "SELECT `user`,`password` FROM `login` WHERE `user` = '".$_SESSION["SESUSER"]."' and `password` = '".$_SESSION["SESPASS"]."' " );
			$this->Log_FET = Mysql_fetch_assoc ( $this->Log_SEL );
			if ( Empty($this->Log_FET['user']) or $this->Log_FET['user'] != $_SESSION["SESUSER"] or Empty($this->Log_FET['password']) or $this->Log_FET['password'] != $_SESSION["SESPASS"] ){
				header ("Location: login");
		
			}
		}
	}
اين هم فراخوانى :
PHP:
$pointer = new login();


به نظرم این کاری که شما میکنی جالب نیست !!!!!!!!!!!! چون با درخواست هر صفحه یه کوئری بیخودی از دیتابیس گرفته میشه

میشه بگی چطوری میتونی تو سرور سشن رجیستر میکنی اونم با هر نام و مقداری
در ضمن اگه همچین کاری هم بتونی انجام بدی بازم راه های بهتری هست که نیاز به کوئری گرفتن از دیتابیس نباشه مثلا مقدار سشن رو هش کنی و به عنوان کوکی ذخیره کنی و بعد هر سری که صفحه درخواست میشه مقدار هش شده سشن را با مقدار کوکی چک کنی تا از صحت سشن اطمینان حاصل کنی
 

جدیدترین ارسال ها

بالا