PDA

View Full Version : session in php



zohreh.hn
یک شنبه 08 تیر 1393, 23:50 عصر
سلام یک سوال دارم ممنون اگه پاسخ بدید:
من سشن را هنگام ورود به یک سایت فعال می کنم
که در هر صفحه ای می روم اسم کاربری که وارد شده است را نشان می دهد و خوشامد می گوید
اما بدون زدن دکمه ی خروج وقی سایت را می بندم و دوباره باز میکنم اسم کاربر هنوز هست
درصورتی که می خواهم اگر بدون خروج صفحه را بست برای ورود، مجدد یوزر و پس خود را وارد کند
چکار باید بکنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

pejman_view
دوشنبه 09 تیر 1393, 01:59 صبح
سلام

نگاه کنید قانون session این است که شما تا زمانی که مرورگر خود را نبستید (منظورم تب نیست ها). سشن باز می ماند و دیفالت PHP حدود 24 دقیقه به شما امکان می دهد که اگر صفحه را باز بگذارید یا ببندید session در مرورگر باقی بماند. یعنی اگر شما از سایت به مدت 24 دقیقه استفاده نکردید بسته می شود.

روشهایی که به ذهن من می رسه، آیا سایت شما طوری است که کاربر بخواهد برای راحتی کار مثلاً چند تب باز کنه؟
اگر خیر باشد جواب شما می توانید تابع javascript را نوشته که به محض بسته شدن تب بصورت ای جکس دستور نابود کردن سشن را بدهد. که البته راه چندان کارآمدی نیست.

روش دیگری هم هست به محض اینکه کاربر در سایت لاگین کرد یک کد سشن در اختیارش قرار دهید و در دیتابیس ذخیره کنید بدین گونه که در عنوان سایت قابل نمایش باشد
http://localhost/?csid=3x3223dfsfsdfx
که با دریافت این کد مقادیر مورد نیاز سشن از دیتابیس بازیابی شود. و سپس با چک کردن رفرر صفحه قبلی ببینید آیا از صفحه ای که به این صفحه هدایت شده سشن مشابه داشته یا خیر. و اگر داشته که هیچ به کار خود ادامه می دهد اگر نداشته سسشن موجود destroy شود و به صفحه لاگین برگردد. که باز هم این راه قابل اتکایی نیست چون قابلیت تغییر دادن هدرهای مرورگر هم موجود است.

این مواردی بود که به ذهن بنده رسید ممکن است راه های زیاد دیگری وجود داشته باشد که الان به ذهنم خطور نکرده است اما هر دو مورد بالا مواردی هستند سمت کاربر قابل تغییر هستند قابل اتکا نیست. بایستی اهمیت سیستم خود را بسنجید و چرا می خواهید حتماً با بسته شدن تب اطلاعات صفحه پاک شود؟

metal gear solid 4
دوشنبه 09 تیر 1393, 08:54 صبح
میتونید وقتی که کاربر وارد سایت شما میشه این خط رو بعد از ورود موفقیت آمیز کاربر بنویسید. ( به شرطی که قبلش سشن رو استارت کرده باشید )

<?php
$_SESSION['timeout'] = time();
?>

و طی درخواست های بعدی ( کاربر صفحات سایت رو باز میکنه ) بررسی کنید که از زمان ورود کاربر 10 دقیقه گذشته یا نه . اگر گذشته سشن رو unset یا destroy کنید.



<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>



و یا اگر نمیخاید هر 10 دقیقه کاربر رو logout کنید ، با هر بار باز کردن صفحات توسط کاربر اگر و فقط اگر قبلاً سشن timeout ست شده بود و مقدار داشت (سشن تنها هنگام ورود کاربر ست میشه و در باقی موارد فقط مقدارش update میشه) مقدارش رو دوباره به زمان فعلی تغییر بدید. اگر سشن وجود نداشت یعنی کاربر طی 10 دقیقه گذشته فعالیتی نداشته و باید از سیستم خارج و به صفحه ی Login هدایت بشه.




<?php
if(isset($_SESSION['timeout']) AND $_SESSION['timeout'] + 10 * 60 > time())
$_SESSION['timeout'] = time();
else
header("location: logout.php");
?>

abolfazl-z
دوشنبه 09 تیر 1393, 10:01 صبح
دوست عزیز وقتی میگویید سایت را می بندم دو حالت به ذهن من خطور میکند :

1. تب را بستید ؟

2. مرورگر را بستید ؟

برا اینکه شما مرورگر را ببندید و سشن هم منقضی بشود باید مانند دستور ذیل عمل کنید :



<?php
session_set_cookie_params(0);
session_start();
?>

تابع session_set_cookie_params به شما این امکان را می دهد که پارامتر های کوکی را برای سشن تنظیم کنید و اولین پارامتر آن lifetime هست یعنی مدت زندگی کوکی در سمت کلاینت به ثانیه (کاربر شما) و صفر قرار دادن این پارامتر به این معنی هست که تا زمانی که کاربر مرورگر را نبندد این کوکی | سشن پا برجاست ولی اگر ببندد کوکی از بین می رود در نتیجه سشن هم از بین میرود.

توجه داشته باشید که شما می توانید با استفاده از روش دوست مان (metal gear solid 4 (http://barnamenevis.org/member.php?76293-metal-gear-solid-4)) مدیریت کافی بر روی سشن داشته باشید.