ورود

View Full Version : سوال: چه وقت کاربر براوزر را میبندد؟



Arsess
جمعه 27 خرداد 1390, 16:12 عصر
تمام کوکیها و سشنهای من در پی اچ پی روی یک هفته تنظیم شده و من نمیخوام تغییرش بدم. حالا چطور میتونم متوجه بشم که کی کاربر پنجره یا تب رو میبنده؟

حتی با کد زیر این کوکی باقی میمونه
$.cookie('Offline','Offline',{expires:0});

mehdi.mousavi
شنبه 28 خرداد 1390, 23:46 عصر
سلام.
وقتی Tab یا Window بسته میشه، onbeforeunload رخ میده و شما میتونید در اون نقطه کد مورد نظرتون رو بنویسید:


window.onbeforeunload = function() {
alert('window is closing...');
}


موفق باشید.

Arsess
یک شنبه 29 خرداد 1390, 00:37 صبح
ممنون از جواب، ولی هر بار که صفحه refresh میشه یا روی هر لینکی که کلیک میکنم که توی سایت خودم از جایی به جایی برم هم این کد اجرا میشه.

با مقداری مطالعه و جستجو در گوگل متوجه شدم که راه حلش اینه که ما یه کوکی بسازیم که زمان عمرش 0 باشه. به این ترتیب این کوکی توی function ای که شما محبت کردین کنترل میشه که با ازبین رفتنش به این نتیجه میرسیم که کاربر براوزر رو بسته.

ظاهرا دیگه مشکلی نیست ولی مشکل وقتی پیش میاد که ما قبلا طول عمر کوکیها و سشنها رو هنگام ورود اعضا روی مثلا چند هفته تنظیم کردیم چون کاربر روی remember me کلیک کرده بود. حالا چطور میشه این وسط یه کوکی با طول عمر 0 تعیین کرد؟

من یه تاپیک دیگه هم برای این مسئله توی تالار پی اچ پی ایجاد کردم.

http://barnamenevis.org/showthread.php?291927-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-session-%D9%87%D8%A7%DB%8C-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D8%A8%D8%A7-expiration-%D9%87%D8%A7%DB%8C-%D9%85%D8%AE%D8%AA%D9%84%D9%81&p=1283396

باز هم ممنون از توجهتون

Arsess
پنج شنبه 02 تیر 1390, 11:32 صبح
کسی نیست که کمک کنه؟ آقای موسوی، شما همین کار رو توی سایتتون نکردین؟ شما نیاز به کنترل بسته شدن براوزر جهت آفلاین کردن یا چیز دیگه ای ندارین؟

MSN_Issue
پنج شنبه 02 تیر 1390, 12:45 عصر
دوست عزیز مشکلتون زیاد قابل درک نیست !!!
اگه شما میخواید برای سایتتون لاگین و مرا بخاطر آور بذارید ، چاره-ش ساده ست ... !
برای مرا بخاطر آور : از کوکی استفاده میشه که زمان اون قابل تعیینه !
برای لاگین : از سشن استفاده میشه که با بستن مرورگر یا تب مورد نظر از بین میره و لاگ اوت میشه !
...
حالا مشکل شما کجاست ؟!:چشمک:

Arsess
پنج شنبه 02 تیر 1390, 17:48 عصر
if ($_POST['rememberMe'] == "1") {
session_set_cookie_params(2*7*24*60*60, '/', '.' . $Domain . '.com');
// Making the cookie live for 2 weeks
}
else {
session_set_cookie_params(0, '/', '.' . $Domain . '.com');
}

با این کد وقتی کاربر remember me را علامت میزنه، تمامی سشنها و کوکیها تا دو هفته باقی میمونن. اگه هم نزنه، با اینکه زمان عمر صفر تعیین شده، تا پاک شدن توسط gc، کوکیها باقی میمونن. یعنی باز هم بسته شدن براوزر رو تحت کنترل نداریم. gc رو هم توی php.ini نمیشه کمتر از ۱۰۰ ثانیه تعریف کرد. اگه هم بشه، توی سرور ما نمیشه. یعنی کاربر اگه وارد بشه و قبل از ۱۰۰ ثانیه خارج بشه، باز هم همون آشو همون کاسه.
زمانیکه کاربر remember meرو میزنه، عمر سشنها و کوکیها روی ۲ هفته تنظیم میشه. همونجا من یه کوکی با عمر صفر تعیین میکنم ولی اون کوکی هم با بسته شدن براوزر از بین نمیره. شاید بخاطر داستان ۱۰۰ ثانیست.
امیدوارم مشکل رو خوب بیان کرده باشم.

mehdi.mousavi
پنج شنبه 02 تیر 1390, 19:07 عصر
با این کد وقتی کاربر remember me را علامت میزنه، تمامی سشنها و کوکیها تا دو هفته باقی میمونن. اگه هم نزنه، با اینکه زمان عمر صفر تعیین شده، تا پاک شدن توسط gc، کوکیها باقی میمونن. یعنی باز هم بسته شدن براوزر رو تحت کنترل نداریم. gc رو هم توی php.ini نمیشه کمتر از ۱۰۰ ثانیه تعریف کرد. اگه هم بشه، توی سرور ما نمیشه. یعنی کاربر اگه وارد بشه و قبل از ۱۰۰ ثانیه خارج بشه، باز هم همون آشو همون کاسه. زمانیکه کاربر remember meرو میزنه، عمر سشنها و کوکیها روی ۲ هفته تنظیم میشه. همونجا من یه کوکی با عمر صفر تعیین میکنم ولی اون کوکی هم با بسته شدن براوزر از بین نمیره. شاید بخاطر داستان ۱۰۰ ثانیست. امیدوارم مشکل رو خوب بیان کرده باشم.

سلام.
من از PHP اطلاع چندانی ندارم، اما توی Manual اش که نگاه کردم، session_set_cookie_params فقط زمانی درست عمل می کنه که قبل از session_start فراخوانی شده باشه. اما وقتی session ایجاد شده باشه، باید با استفاده از کد زیر lifetime اونو به بسته شدن browser ربط بدید:


setcookie(session_name(), $_COOKIE[session_name()], 0, "/");

برای اطلاعات بیشتر، آخرین پاسخ در این آدرس (http://www.justanswer.com/computer/0uwp8-problem-php-script-sessions.html) رو مطالعه کنید.

موفق باشید.

Arsess
جمعه 03 تیر 1390, 11:56 صبح
[QUOTE=mehdi.mousavi;1286749]

setcookie(session_name(), $_COOKIE[session_name()], 0, "/");
من این کد رو قبل از session_start اجرا کردم. با این دستوری هم که شما محبت کردین، lifetime تمام سشنها و کوکیها به بسته شدن براوزر ربط داده میشه و تمایل به این تغییر ندارم چون میخوام کاربر لاگین بمونه.

Arsess
جمعه 03 تیر 1390, 12:25 عصر
با سلام
توی جاوااسکریپت راهی نیست که بشه یه کوکی رو استثنا ایجاد و اونو به بسته شدن ربط داد؟ من اینکار رو با پی اچ پی کردم ولی عمل نکرد. یعنی با بسته شدن براوزر، اون یه دونه کوکی از بین نرفت. با جی کوئری هم کردم، باز هم نشد.
شما با جاوااسکریپت یا زبون دیگه راهی میشناسین که باهاش بشه فقط یدونه کوکی رو به بسته شدن براوزر وصل کرد؟
از لطف و وقتتون ممنونم.

mehdi.mousavi
شنبه 04 تیر 1390, 18:31 عصر
با سلام توی جاوااسکریپت راهی نیست که بشه یه کوکی رو استثنا ایجاد و اونو به بسته شدن ربط داد؟ من اینکار رو با پی اچ پی کردم ولی عمل نکرد. یعنی با بسته شدن براوزر، اون یه دونه کوکی از بین نرفت. با جی کوئری هم کردم، باز هم نشد.
شما با جاوااسکریپت یا زبون دیگه راهی میشناسین که باهاش بشه فقط یدونه کوکی رو به بسته شدن براوزر وصل کرد؟ از لطف و وقتتون ممنونم.

سلام.
در JavaScript، می تونید بدین شکل عمل کنید:

document.cookie = 'mycookie=myvalue; path=/';

بدین ترتیب، cookie ای ایجاد میشه تحت نام mycookie با مقدار myvalue که با از بین رفتن Session از بین خواهد رفت. دقت کنید که Session هنگامی از بین میره که شما Browser رو ببندید، نه اینکه Tab مربوطه رو ببندید. در واقع Session-Cookie ها بازای پروسه ایجاد میشن، نه به ازای Window های باز و بسته شده...

موفق باشید.