PDA

View Full Version : unset كردن برخي متغيرهاي session هنگام خروج از يك صفحه ي سايت



yasercomeng
پنج شنبه 24 بهمن 1387, 00:33 صبح
فرض كنيد من يه session اي درست كردم كه فقط مخصوص صفحه ي جاري هست. اين كه گفتم يعني چه؟ يعني اينكه به ازاي هر صفحه ي جديدي كه از سايتم باز مي شه من براي اين صفحه يه مقدار تويه آرايه ي $_SESSION ايجاد مي كنم. حالا من براي unset كردن اين session ها مشكل دارم. و اما چه موقع session هاي مربوط به هر صفحه unset ميشن، وقتي كه كاربر داره از اين صفحه خارج مي شه (به هر صورتي مثلاً صفحه رو مي بنده يا ميره به يه لينك ديگه تويه سايت و غيره ).
پس سؤالم اينه كه مي خوام يه كاري كنم كه به هنگام خروج فرد از اين صفحات session مربوط به اين صفحات نيز unset شود.در ضمن اينو بگم كه من براي پياده سازي اين كار براي هر صفحه يك ID يكتا با MD5 درست مي كنم و ساختار كلي session هام به صورت $_SESSION[$_POST["PageID"]] مي باشد. كه اين $_POST["PageID"] حاوي همون ID يكتاست كه در طول گذر كاربر در داخل صفحه جاري همواره پاس داده مي شود.
فقط اميدوارم كه سؤال رو خوب توضيح داده باشم. چون خيلي اين مورد اضطراري و منم وقت زيادي رو اجراي اين سيستم گذاشتم اميدوارم كه اين مشكل حل بشه.

as13851365
پنج شنبه 24 بهمن 1387, 08:12 صبح
آیا اجباری هست که شما حتما بعد از خروج کاربر session را خالی کنید ؟

تا زمانی که کاربر مرورگر را نبسته session وجود داره و اگر کاربر مرورگر را بست سیشن هم پاک می شه

حالا شما به چه منظوری می خواهید با خروج کاربر از صفحه سیشن را پاک کنید ؟

اگه کمی درباره علت این کار توضیح بدید فکر کنم خیلی بهتر بشه نتیجه گرفت

yasercomeng
جمعه 25 بهمن 1387, 13:13 عصر
ببين عزيز اگه بخوام دليل يه همچين كاري رو توضيح بدم بايد بياي بغل من بشيني تا كل پروژه رو واست توضيح بدم.
گفتم كه هدف اصليم اينه كه وقتي كاربر از صفحه ي جاري خارج شد session ساخته شده ي مربوط به اين صفحه هم unset بشه.فقط دقت كنيد اون session ، session ساخته شده ي مربوط به همين صفحه است من نمي خوام بقيه ي مقادير داخل session از بين برن فقط همين session مخصوص.

narsic
جمعه 25 بهمن 1387, 15:22 عصر
با سلام
میتونید از رویدادهای بستن (Onclose) مرورگر برای این کار استفاده کنید .
یعنی در زمان بسته شدنه صفحه یک درخواست به یک صفحه بفرستید که Session رو خالی کنه .
موفق باشید

yasercomeng
جمعه 25 بهمن 1387, 17:59 عصر
بله خودم هم اينو ميدونم ولي نحوه ي اجراشو دقيقاً نميدونم.

yasercomeng
جمعه 25 بهمن 1387, 21:02 عصر
من يه تيكه كد واسه اين كار نوشتم ولي نميدونم درست از ajax استفاده كردم يا نه؟
من اين كد رو با اين فرض نوشتم كه تو صفحه ي unset.php ، اون session اي كه داراي pageId پاس داده شده باشه، پاك خواهد شد.خواهشاً اگه ممكنه تويه كد ajax نوشته شده كمكم كنيد تا كاملش كنم.واقعيتش اينه كه من زياد ajax بلد نيستم.

var request = false;
try
{
request = new XMLHttpRequest();
}
catch (trymicrosoft)
{
try
{
request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (othermicrosoft)
{
try
{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (failed)
{
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRequest!");
window.onclose=function()
{
var PapeId=document.getElementsByName("PageId").value;
var url="./unset.php";
request.open("POST",url,true);
request.onreadystatechange=undergo;
request.send(PageId);
}
function undergo()
{
// in this place, i redirect to the page that user clicked
}

as13851365
شنبه 26 بهمن 1387, 09:18 صبح
این کد را یکی از دوستان در سایت قرار داده بود :


<script type="text/javascript">
//<![CDATA[
function Ajax() {
var req=null;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
} else if (window.ActiveXObject){
req = new ActiveXObject("Msxml2.XMLHTTP");
if (!req){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(!req) {
alert('مرورگر شما از اي جکس پشتيباني نمي کند! لطفاً از يک مرورگر ديگر براي مشاهده اين صفحه استفاده نماييد');
return false;
}
return req;
}
window.onunload = function() {
var req = new Ajax();
req.open("GET", 'آدرس مربوط به کد حذف کردن سيشن رو وارد کن', true);
req.send(null);
}
//]]>
</script>