PDA

View Full Version : سوال: session و کش شدن



DR.HTML
جمعه 22 آذر 1392, 10:49 صبح
دوستان یه سوالی داشتم که توی نت جستجو کردم اما جوابی براش پیدا نکردم

من یه فرم لاگین ساختم که توش از Session بسیار ساده ای استفاده کردم حالا توی فایر فاکس سشن عمل نمیکنه اما توی مرورگرهای دیگه میکنه فهمیدم که کش شده راهی هست برای حل این مشکل ؟

Tarragon
جمعه 22 آذر 1392, 10:58 صبح
سلام
ctrl + F5 بزنید ، ببینید حل نمی شه؟

DR.HTML
جمعه 22 آذر 1392, 11:04 صبح
با تشکر
میدونم چجوری کش رو خالی کنم میخوام مشکلش حل بشه یعنی نیاز به Ctrl + f5 نباشه

Tarragon
جمعه 22 آذر 1392, 11:17 صبح
سلام
لطفا کدتون رو بزارید تا ببینیم.

DR.HTML
جمعه 22 آذر 1392, 11:29 صبح
<?php
ob_start();
session_start();
$det=mysql_connect("localhost","root","");
mysql_select_db("myphp",$det);
$ted=mysql_query("select * from users where user='".$_POST['username']."' and password='".$_POST['password']."'")or die(mysql_error());
mysql_num_rows($ted);
if ($ted > 1)
{
$_SESSION["x"]=1;
header("location:main.php");
}
else
header("location:index.php");
?>


<?php session_start();

if ($_SESSION["x"]!=1)
header("location:index.php");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
echo "hale!";
?>
</body>
</html>



و یه مشکل دیگه ای که برخوردم اون شرطی که توی لاگین گذاشتم متوجه شدم کار نمیکنه !

mysql_query("select * from users where user='".$_POST['username']."' and password='".$_POST['password']."'")or die(mysql_error());

این مگه نباید 1 یا 0 چاپ کنه ! داره 4 چاپ میکنه ! :O

MRmoon
جمعه 22 آذر 1392, 11:50 صبح
<?php
ob_start( );
session_start( );
$det = mysql_connect( "localhost" , "root" , "" );
mysql_select_db( "myphp" , $det );
$u = mysql_real_escape_string( $_POST['username'] );
$p = mysql_real_escape_string( $_POST['password'] );
$ted =mysql_query( "select COUNT(*) as count from users where user='$u' and password='$p'" ) or die( mysql_error( ) );
$ted = mysql_fetch_object( $ted ) -> count;
if ($ted > 1)
{
$_SESSION["x"] = 1;
header( "location:main.php" );
}
else
header( "location:index.php" );
?>
اینو به جای کد اولی جایگزین کنید.

اولا کد شما باگ Sql Injection داست بعدشم از تابع mysql_num_rows به درستی استفاده نکردین... بعدشم بهتره ÷سورد رو هش کنید بعد تو دیتابیس بریزین.

DR.HTML
جمعه 22 آذر 1392, 12:03 عصر
جناب mrmoon چیزی که میبینید من نوشتم قعلا برای اموزش و یاد گیری خودم بود روی امنیت کار نکرده بودم
و میشه در مورد mysql_num_rows و اینکه شما بجاش احساس میکنم از
mysql_fetch_object اسفتاده کردید توضیح بدید ؟

MRmoon
جمعه 22 آذر 1392, 13:48 عصر
خوب منم از جنبه آموزشی گقتم :)

خوب وقتی میخواید تعداد رکورد ها رو بشمرید و هدف دیگه ای ندارید بهتره از تابع خوب sql
COUNT(column)
استفاده کنید....
mysql_fetch_object هم همون mysql_fetch_assoc هست فقط به جای آرایه object هست.

Tarragon
جمعه 22 آذر 1392, 14:14 عصر
با اجازه ی اقا محمد ، حرف های اقا محمد کاملا صحیحه اما این کد خودتون صحیح و سالم

<?php
session_start();
$db = mysql_connect( "localhost" , "root" , "" );
mysql_select_db( "myphp" , $db );
$u = mysql_real_escape_string( $_POST['username'] );
$p = mysql_real_escape_string( $_POST['password'] );
$result = mysql_query( "select * from users where user='$u' and password='$p'" ) or die( mysql_error( ) );
$num = mysql_num_rows($result);
if ($num > 1)
{
$_SESSION['x'] = 1;
header('location: main.php');
}
else
header('location: index.php');