PDA

View Full Version : مشکل در session



hofa_7
شنبه 01 دی 1386, 17:07 عصر
سلام
یک مشکلی ایجاد شده برای من اگر کسی بتونه کمک کنه ممنون می شم , وقتی من login می کنم و مقدار متتغیرها رو با post می گیرم سریع متغیر session رو پر می کنم و بین صفحات منتقل می کنم , حالا مشکل اینجاست که اگر فردی که وارد شده از یه قسمت logout کنه حالا بیاد دکمه back رو بزنه تا جایی که مقدار post مقداردهی شده بود برگرده دوباره session مقداردهی می شه , بنابراین کاربر در حالی که logout کرده ولی دوباره به همه صفحات دسترسی داره .
ممنون می شم اگه زودتر کسی به من کمک کنه

tabib_m
شنبه 01 دی 1386, 20:01 عصر
سلام
یک مشکلی ایجاد شده برای من اگر کسی بتونه کمک کنه ممنون می شم , وقتی من login می کنم و مقدار متتغیرها رو با post می گیرم سریع متغیر session رو پر می کنم و بین صفحات منتقل می کنم , حالا مشکل اینجاست که اگر فردی که وارد شده از یه قسمت logout کنه حالا بیاد دکمه back رو بزنه تا جایی که مقدار post مقداردهی شده بود برگرده دوباره session مقداردهی می شه , بنابراین کاربر در حالی که logout کرده ولی دوباره به همه صفحات دسترسی داره .
ممنون می شم اگه زودتر کسی به من کمک کنه
سلام
طبیعتا هم باید همینطور باشه.
به صفحه ی قبلی, اطلاعاتی به صورت post فرستاده شده, وقتی کاربر درخواست فراخوانی مجدد میده, طبیعتا دوباره اون اطلاعات ارسال میشن (توسط مرورگر) و دوباره عملیات اجرا میشه

مشکلت با این قضیه چیه؟ چرا نباید اینجوری بشه؟

hofa_7
یک شنبه 02 دی 1386, 08:13 صبح
مشکل اینجاست که من سایت های دیگه رو دیدم درسته که وقتی logout می کنه و دکمه back رو می زنه می تونه صفحه قبل رو ببینه ولی دیگه اجازه نمی ده صفحات بعد رو ببینیم ولی مشکل من اینجاست که من وقتی با دکمه back بر می گردم به صفحه ای که مقادیر post وجود داشته اند دوباره مقادیر session ها پر می شند و مثل این هست که کاربر دویاره می تونه به تمام صفحات دسترسی داشته باشه بدون login کردن , در حالی که توی سایت های دیگه مثل همین سایت همچین اتفاقی نمی افته , یعنی وقتی کاربر logout می کنه ممکنه دکمه back رو بزنه و صفحه قبل رو ببینه ولی session ها دیگه پر نمی شن ,حالا من چکار کنم که دیگه session پر نشن ؟ امیدوارم توضیح من کامل باشه و یه راه حلی برام بنویسید

oxygenws
یک شنبه 02 دی 1386, 08:49 صبح
کد اون صفحه ای که back می زنی و می بینیش رو بنویس.

hidensoft
یک شنبه 02 دی 1386, 12:54 عصر
این می تونه یک حفره امنیتی باشه که خودتون با برنامه نویسی غلط خودتون ایجاد کردید که باز هم مستقیما بر می گرده به منطق برنامه شما !

کد اون صفحه ای که back می زنی و می بینیش رو بنویس.
همینطور کد صفحه لوگین

hofa_7
یک شنبه 02 دی 1386, 15:36 عصر
من اینجا کد 4 صفحه در واقع منطق برنامه نویسی من هست رو می زارم
این کد فرم





<form method="post" action="process.php">
<table cellpadding="0" cellspacing="0" border="0" width="50%" class="login">
<tr><td width="18%" align="right">:نام کاربری&nbsp;&nbsp;</td></tr>
<tr>
<td width="82%" align="center"><input type="text" name="username" ></td>
</tr>
<tr><td width="18%" align="right">:رمز عبور&nbsp;&nbsp;</td></tr>
<tr>
<td width="82%" align="center"><input type="password" name="password"></td>
</tr>
<tr><td align="center"><br><input type="submit" value="ورود" /></td>
</tr>


</table>
</form>


این هم کد صفحه ای post و session مقداردهی می شه , در واقه همین صفحه ایجاد مشکل می کنه چون وقتی logout می کنم توی این صفحه با این نمونه برنامه نویسی دوباره session مقداردهی می شه و کاربر از این به بعد می تونه به همه صفحات دسترسی داشته باشه
نام صفحه process.php




session_start();
$username=$_POST['username'];
$password=$_POST['password'];
$connect=mysql_connect('localhost','root','');
mysql_select_db('databasename');
$result=mysql_query("select * from admin where username='$username' and password='$password' ");
if (!$result)
{
echo mysql_error();
exit;
}
$num=mysql_num_rows($result);
if($num==0)
{
echo"your username and password is wrong";
}else
{
$_SESSION['user']=$_POST['username'];
echo "welcom";
echo "<a href='link.php' > لینک صفحه خصوصی </a>";
}



این هم صفحه ای که فقط کاربر عضو به آن دسترسی داره
نام صفحه link.php




session_start();
if(!isset($_SESSION['user']))
{
echo "you are not member of site";
exit;
}
else echo "user information";
echo "<a href='logout.php'> logout</a>";



و این هم صفحه logout.php




session_start();
session_destroy();



حالا اگر از صفحه logout , link.php کنیم و دو بار back بزنیم تا به صفحه process.php برسیم دوباره session مقداردهی می شه و کاربر هم valid .
حالا نمی دونم چکار کنم ؟
با تشکر از همه اساتید

tabib_m
یک شنبه 02 دی 1386, 16:03 عصر
همونطور که گفتم, وقتی به وسیله ی کلید back دوباره به صفحه ی process.php برمیگردید, دوباره همون عملیاتی که دفعه ی قبل انجام شده, انجام میشه (یعنی در حقیقت دوباره مقادیر اون فرمی که پر کرده بودید, به سرور ارسال میشه و دقیقا مراحلی که قبلا طی شده بود, تکرار میشه)
طبیعتا دوباره سشن مقدار دهی میشه.

اما اگر اصرار دارید که این اتفاق نیفته، میتونید صفحه ای که در اون سشن ذخیره میشه رو از صفحه ای که لینک صفحه ی link.php در اون قرار میگیره جدا کنید و صفحه ی اول به صورت اتوماتیک بعد از لوگین به صفحه ی دوم ارسال بشه. (یعنی عمل redirect -اون هم به وسیله ی php-)
در این صورت فکر میکنم که صفحه ای که سشن رو ثبت میکنه دیگه توی لیست back قرار نمیگیره که بخوات دوباره اجرا بشه (البته این یه تیکه ش رو یکم شک دارم)

موفق باشید.

pooya1037
چهارشنبه 05 دی 1386, 20:10 عصر
دوست عزیز
من این مشکل را تا حدودی به این روش حل کرده ام
وقتی کاربر وارد صفحه اصلی می شود یک سشن به عنوان کاربر عادی تعریف کرده ام
وبعد از خروج کاربرانی که با user name و password وارد شده اند مقدار سشن اولیه کاربر عادی را برابر مقداری قرار داده ام ودر ابتدای همه صفحات بررسی می کگنم اگر مقدار سشن کاربر عادی برابر ان مقدار بعد از خروج logout باشد اجازه ورود نداشته باشد