PDA

View Full Version : سوال: مشکل در Session



rendmaslak
سه شنبه 02 شهریور 1389, 22:47 عصر
سلام بچه ها
من یه کد واسه لاگین نوشتم که کاربر وقتی لاگین میکنه بتونه وارد سیستم مدیریت بشه و در غیر این صورت نتونه
اما مشکل اینجاست بعد از اینکه کاربر لاگین می کنه و از سایت خارج میشه یعنی صفحه رو میبنده دوباره میتونه با وارد کردن آدرس سیستم مدیریت وارد این قسمت بشه !
این در حالیه که مگر نباید با بستن صفحه session ها از بین برن ؟
البته با بستن مرورگر از بین میره ! ولی با بستن صفحه نه !
مشکل چیه ؟
ممنون ...

rendmaslak
سه شنبه 02 شهریور 1389, 23:03 عصر
این کد صفحه لاگین :

<?php
//ob_start();
session_start();

@$user=$_REQUEST["user"];
@$pass=$_REQUEST["pass"];


$host=mysql_connect("localhost","root","");
mysql_select_db("web",$host);

@$login=mysql_query("SELECT * FROM `username` WHERE username ='$user' AND password='$pass'");
if($row=mysql_fetch_assoc($login))
{
$_SESSION['username']=$user;
$ClientString = $_SERVER['HTTP_USER_AGENT'] .$_SERVER['REMOTE_ADDR'];
$_SESSION['ClientStr'] = md5($ClientString);
echo 'welecome!';
header("location:http://localhost/web/cms.php");
}
else
{
echo 'Wrong password or username';
}
// ob_end_flush();
?>--------------------
و این هم کد صفحه مدیریت :

<?php
session_start();

$ClientString = $_SERVER['HTTP_USER_AGENT'] .$_SERVER['REMOTE_ADDR'];
if( !isset( $_SESSION['username']) || $_SESSION['ClientStr'] != md5($ClientString))
{
header( "location: http://localhost/web/login.php" );
exit();
}
?>

morteza271
سه شنبه 02 شهریور 1389, 23:11 عصر
باید وقتی کاربر خارج میشه و مثلا روی دکمه خروج کلیک میکنه اون session رو از بین ببری با این دستور...

session_destroy();
موفق باشید

rendmaslak
سه شنبه 02 شهریور 1389, 23:18 عصر
خب دوست عزیز گفتم که کابر صفحه رو میبنده نه اینکه خروج میزنه !
با بستن صفح session باید به طور خودکار از بین بره
که نمیشه

morteza271
سه شنبه 02 شهریور 1389, 23:24 عصر
با بستن صفحه که فکر نکنم سشن از بین بره ولی با بستن مرورگر از بین میره...
ولی فکر کنم میشه کاری کنی وقتی که کاربر صفحه رو هم میبنده سشن حذف بشه...به احتمال زیاد میشه...
فقط کافیه یه سرچ بزنید...

rendmaslak
سه شنبه 02 شهریور 1389, 23:31 عصر
فکر می کنم به طور خودکار این اتفاق باید بیفته !
به هر حال ممنون ..

bestirani2
چهارشنبه 03 شهریور 1389, 00:04 صبح
فکر می کنم به طور خودکار این اتفاق باید بیفته !
به هر حال ممنون ..
با بستن مرورگر از بین میره
در ضمن در صورتی که خودت از بین نبری روی یک احتمال از بین میره

rendmaslak
چهارشنبه 03 شهریور 1389, 00:09 صبح
--------------------

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

bestirani2
چهارشنبه 03 شهریور 1389, 01:14 صبح
--------------------

یعنی چی روی یک احتمال ؟
میتونی بیشتر توضیح بدی ؟
ممنون
هر بار که یک جلسه جدید آغار میشه طبق احتمالی که در php.ini تنظیم کردیم جلسات دور ریخته میشه
پیش فرض هم 1% هست
یعنی از هر 100 اجرای جلسه، یک بارش میره سروقت جلسات تاریخ گذشته

Ali_Sedaghat
چهارشنبه 03 شهریور 1389, 08:35 صبح
سلام دوستان
من هم همين مشكل را با Session دارم اما به شكل ديگه.
من قصد دارم وقتي كه كاربر وارد پنل خودش شد و كارهاش را انجام داد چنان چه بدون كليك كردن بر روي دكمه ي خروج مرورگر را بست در ورود بعدي نياز به وارد كردن يوزر و پسورد نداشته باشه و با نوشتن لينك سايت در نوار آدرس مستقيماً به پنل كاربري خودش بره.
همان طوري كه دوست گرامي مون گفتند: با بستن صفحه ي جاري نشست بسته نمي شه ولي با بستن مرورگر نشست از بين مي ره.
حالا چه بايد كرد تا با بستن پنجره اين نشست از بين نره؟
ممنون مي شم اگه مرا راهنمايي كنيد
با تشكر
صداقت

ali zi zeperto
چهارشنبه 03 شهریور 1389, 09:38 صبح
سلام دوستان
من هم همين مشكل را با Session دارم اما به شكل ديگه.
من قصد دارم وقتي كه كاربر وارد پنل خودش شد و كارهاش را انجام داد چنان چه بدون كليك كردن بر روي دكمه ي خروج مرورگر را بست در ورود بعدي نياز به وارد كردن يوزر و پسورد نداشته باشه و با نوشتن لينك سايت در نوار آدرس مستقيماً به پنل كاربري خودش بره.
همان طوري كه دوست گرامي مون گفتند: با بستن صفحه ي جاري نشست بسته نمي شه ولي با بستن مرورگر نشست از بين مي ره.
حالا چه بايد كرد تا با بستن پنجره اين نشست از بين نره؟
ممنون مي شم اگه مرا راهنمايي كنيد
با تشكر
صداقت
برای اینکار باید از کوکی ها استفاده کنی.کوکی ها تاریخ انقضا دارن و تا تاریخی که شما معین می کنی اگر کاربر دوباره هر چند بار که وارد سایت شما بشه شناسایی می شه مثل همین سایت برنامه نویس.

فکر می کنم به طور خودکار این اتفاق باید بیفته !
به هر حال ممنون .. به طور خودکار فقط با بستن مرورگر سشن از بین میره.اگر بخوای اون کار رو بکنی باید از جاوا اسکریپت و امثالش کمک بگیری یعنی با php فکر نمی کنم چنین امکانی باشه.چون php سمت سرور اجرا میشه در نتیجه با بستن صفحه امکان از بین بردن سشن نیست مگر اینکه از یه زبان سمت کلاینت استفاده کنی.

binyaft
چهارشنبه 03 شهریور 1389, 10:59 صبح
صفحه دوم رو پاک مثل زیر بنویس شاید بتونه کمک کنه


<?php
session_start();
$ClientString = $_SERVER['HTTP_USER_AGENT'] .$_SERVER['REMOTE_ADDR'];
$_SESSION['ClientStr']= md5($ClientString);
echo("$_SESSION['username']<br>$_SESSION['ClientStr']");
?>

bestirani2
چهارشنبه 03 شهریور 1389, 13:57 عصر
سلام دوستان
من هم همين مشكل را با Session دارم اما به شكل ديگه.
من قصد دارم وقتي كه كاربر وارد پنل خودش شد و كارهاش را انجام داد چنان چه بدون كليك كردن بر روي دكمه ي خروج مرورگر را بست در ورود بعدي نياز به وارد كردن يوزر و پسورد نداشته باشه و با نوشتن لينك سايت در نوار آدرس مستقيماً به پنل كاربري خودش بره.
همان طوري كه دوست گرامي مون گفتند: با بستن صفحه ي جاري نشست بسته نمي شه ولي با بستن مرورگر نشست از بين مي ره.
حالا چه بايد كرد تا با بستن پنجره اين نشست از بين نره؟
ممنون مي شم اگه مرا راهنمايي كنيد
با تشكر
صداقت
میتونی نشست رو به پایگاه داده انتقال بدی و در این صورت برای هر کاربر تاریخ انتقضا متفاوتی رو بزنی با توجه به مدت زمانی که میخواهد بمونه

طاها حک
چهارشنبه 03 شهریور 1389, 14:12 عصر
اگه می خوای با بسته شدن صفحه از بین بره، باید session از تمامی صفحاتت به همدیگه منتقل بشه و تو اول هر صفحه چک کنی اگه مقدار نداشت یا معتبر نبود، صفحه به یه جای دیگه redirect بشه، من همین کار رو تو طراحی لاگینم انجام دادم و درست هم کار می کنه.
مثلاً :


$u = $_SESSION['user'];
$p = $_SESSION['pass'];

if(isset($u) && isset($p))
{
$_SESSION['user']='u';
$_SESSION['pass']='p';

کد صفحت

}
else
{
session_unset($_SESSION['user']);
session_unset($_SESSION['pass']);
header("location: panel.php");
}