PDA

نسخه کامل مشاهده نسخه کامل : ثبت تاریخ خروج از سایت



MaxLag
12-10-2011, 13:41
سلام دوستان من یک log table تو Database ایجاد کردم که شماره ip و تاریخ و زمان ورود و خروج افراد عضو را ثبت میکنه . مشکل من در قسمت خروج هست یعنی وقتی که کاربر sign out میکنه اسکریپت اجرا میشه و تاریخ خروجش بدون هیچ مشکلی ثبت میشه ولی ممکنه طرف روی sign out نزنه و مثلا صفحه رو ببنده. آیا متد یا تابع خاصی هست که به محض destroy شدن session به صورت اوتوماتیک اجرا بشه؟

m.m.m5651
12-10-2011, 19:49
میشه با onclose در جاوا اسکریپت نوشتش و درون فانکشن هم با ای جکس صفحه ارسال آی پی رو لینک داد اما باید حتما به کاربران تحمیل کنید که جاوا اسکریپت رو روشن بذارن!

MaxLag
12-10-2011, 22:07
آره با javascript و ajax میشه ولی همینطور که خودت گفتی ممکنه کاربر javascript رو off کرده باشه و اینکه از لحاظ امنیتی هم اصلا نمیخوام از javascript استفاده کنم و اگه صفحات سایت زیاد باشه مجبورم تک تک از script رو لینک بدم.
یه فکر به ذهنم رسید که session_id رو بگیرم و بگم به محض اینکه فایل سشن unlink بشه دیتابیس رو update کن ولی حالا که فک میکنم میبینم نمیشه. در کل به event احتیاج دارم که php متاسفانه event در مورد window نداره. خوشحال میشم اگه دوستان نظرشون رو در این باره بدن.

m.m.m5651
12-10-2011, 23:26
یه کاری به ذهنم رسید:
دو تا فیلد برای آی پی بسازید در دیتابیس.
سپس، به جز بار اول، یعنی بار دوم که وارد شدید، بگید جای
محتوای این دو فیلد رو عوض کنید. البته قبلش در فیلد اول آی پی دفعه ی قبلی هنگام ورود ذخیره و در دومی آی پی هنگام ورود همین دفعه رو ذخیره کنید.
و در کنترل پنل فیلد اول رو به عنوان آخرین نفر لاگین کرده بذارید.

MaxLag
13-10-2011, 00:32
avardeh جان ممنونم ولی مشکل من تو تاریخ خروج هستش و به ip کاری ندارم

m.m.m5651
13-10-2011, 17:57
پس برای تاریخ همین کار رو بکنید.راستی، خوب مگه برای ذخیره ی آی پی چه سیستمی داشتید؟از همون استفاده نمیشه کرد؟

MaxLag
13-10-2011, 20:17
خوب ذخیره ip که مشخصه تا کاربر sign in میکنه ip تو database ذخیره میشه . اون تاریخ هست که 2 تا لازم داریم: یکی تاریخ ورود که به همراه ip زمان sign in وارد میشه ولی تاریخ خروج که با اسکریپت sign out ذخیره میشه ممکنه همیشه اجرا نشه (اکثر کاربرا اینجا اصلا sign out نمیکنند) . ممکنه بگید اصلا چه احتیاجی به تاریخ خروج داری ولی داستان خیلی حیاتی هست واسه من . اون راهی هم که گفتید فکر میکنم تاریخ خروج current session رو ذخیره نمیکنه و با دفعه قبل کار داره .

mb1372
15-10-2011, 13:49
شايد اين روش همون روش avardeh جون باشه ولي ميگمش:
كاربر هر صفحه اي رو باز مي كنه تاريخ رو ذخيره كن.اين طوري خيلي به ساعت خروج نزديك ميشي.

moein_ak
16-10-2011, 00:39
شايد اين روش همون روش avardeh جون باشه ولي ميگمش:
كاربر هر صفحه اي رو باز مي كنه تاريخ رو ذخيره كن.اين طوري خيلي به ساعت خروج نزديك ميشي.

منم همین راه به ذهنم میزنه
میتونیم یه اسکریپت طراحی کنی که هر ۲ ۳ دقیقه یه بار چک کنه session کاربر تموم شده یا نه بعدم دیتابیسو آپدیت کنه

m.m.m5651
16-10-2011, 16:18
آره اما بازم جاوا اسکریپت محسوب میشه که گفتند نمیخوان! :20:
ولی در جاوا اسکریپت این تابع کمک می کنه:
setInterval

moein_ak
16-10-2011, 23:48
آره اما بازم جاوا اسکریپت محسوب میشه که گفتند نمیخوان! :20:
ولی در جاوا اسکریپت این تابع کمک می کنه:
setInterval

منظورت چیه جاوا اسکریپت؟
من منظورم یه اسکریپت پی اچ پیه نه جاوا اسکریپت
با یه کرون جابم هر دقیقه اجرا میشه

neopersia
17-10-2011, 15:26
سلام دوستان من یک log table تو Database ایجاد کردم که شماره ip و تاریخ و زمان ورود و خروج افراد عضو را ثبت میکنه . مشکل من در قسمت خروج هست یعنی وقتی که کاربر sign out میکنه اسکریپت اجرا میشه و تاریخ خروجش بدون هیچ مشکلی ثبت میشه ولی ممکنه طرف روی sign out نزنه و مثلا صفحه رو ببنده. آیا متد یا تابع خاصی هست که به محض destroy شدن session به صورت اوتوماتیک اجرا بشه؟
خوب اصولاً تا زمانی که کاربر signout نکنه هنوز از سیستم خارج نشده!
اینکه کاربر پنجره مروگر رو ببنده دلیل بر خارج شدن نیست چون مرورگر میتونه به هر دلیلی بعد از اینکه مجدداً باز شد کوکی های قبلی رو ریستور کنه و سشن مجدداً فعال بشه. سسن در سرور حتی بعد از اینکه کاربر پنجره مرورگر رو ببنده باقی میمونه تا زمانی که عمر سشن تموم بشه
شما میتونید زمان آخرین فعالیت کاربر رو که قابل محاسبه هست به جای زمان خرورج از سیستم در نظر بگیریید که منطقی تر هست. اگر هم اصرار دارید زمان خروج رو داشته باشید میتونید زمان آخرین فعالیت رو بعلاوه طول عمر سشن کنید وگرنه دیگه هیچ راهی به جز جاوا اسکرپت باقی نمیمونه

MaxLag
17-10-2011, 18:24
خوب اصولاً تا زمانی که کاربر signout نکنه هنوز از سیستم خارج نشده!
اینکه کاربر پنجره مروگر رو ببنده دلیل بر خارج شدن نیست چون مرورگر میتونه به هر دلیلی بعد از اینکه مجدداً باز شد کوکی های قبلی رو ریستور کنه و سشن مجدداً فعال بشه. سسن در سرور حتی بعد از اینکه کاربر پنجره مرورگر رو ببنده باقی میمونه تا زمانی که عمر سشن تموم بشه
شما میتونید زمان آخرین فعالیت کاربر رو که قابل محاسبه هست به جای زمان خرورج از سیستم در نظر بگیریید که منطقی تر هست. اگر هم اصرار دارید زمان خروج رو داشته باشید میتونید زمان آخرین فعالیت رو بعلاوه طول عمر سشن کنید وگرنه دیگه هیچ راهی به جز جاوا اسکرپت باقی نمیمونه

مرسی از راهنماییتون . دقیقا من هم همینو میخوام که ببینم عمر سشن چه قدر هست میشه بیشتر راهنمایی کنید؟
یه سوال دیگه اینکه تا چه زمانی بعد از بستن پنجره broewser سشن باقی میمونه (با توجه به این که من هیچ گونه کوکی ست نکردم) و آیا تنظیمات خاصی در php.ini میشه انجام داد که این زمان رو کم کرد. ممنون

m.m.m5651
17-10-2011, 18:36
مرسی از راهنماییتون . دقیقا من هم همینو میخوام که ببینم عمر سشن چه قدر هست میشه بیشتر راهنمایی کنید؟
یه سوال دیگه اینکه تا چه زمانی بعد از بستن پنجره broewser سشن باقی میمونه (با توجه به این که من هیچ گونه کوکی ست نکردم) و آیا تنظیمات خاصی در php.ini میشه انجام داد که این زمان رو کم کرد. ممنون
فکر کنم تابع زیر کمک کنه:
session_set_cookie_params

neopersia
17-10-2011, 18:46
مرسی از راهنماییتون . دقیقا من هم همینو میخوام که ببینم عمر سشن چه قدر هست میشه بیشتر راهنمایی کنید؟
یه سوال دیگه اینکه تا چه زمانی بعد از بستن پنجره broewser سشن باقی میمونه (با توجه به این که من هیچ گونه کوکی ست نکردم) و آیا تنظیمات خاصی در php.ini میشه انجام داد که این زمان رو کم کرد. ممنون
تا جایی که من میدونم مقدار session.gc_maxlifetime در php.ini طول عمر سشن رو تعیین میکنه. با این روش میتونید این مقدار رو به دست بیارید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در مورد سوال دومتون هم همونطور که در پست قبلی گفتم سشن در سرور تا زمانی که طول عمرش تموم بشه فعال باقی میمونه. در مرورگر چون با بسته شدن پنجره، کوکی های سشن حذف میشه بعد از باز کردن دوباره مرورگر آی دی سشن که در کوکی بوده حذف شده و بنابراین سرور یک سشن جدید براش ایجاد میکنه (البته همونطور که گفتم مرورگر میتونه به دلایلی کوکی قبلی رو دوباره ریستور کنه)

چون session.gc_maxlifetime از نوع PHP_INI_ALL هست پس باید بشه از داخل اسکرپت با ini_set مقدارش رو تغییر داد (البته فکر میکنم قبل از شروع سشن باید این کار انجام بشه). به این صورت:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


فکر کنم تابع زیر کمک کنه:
session_set_cookie_params
این فقط مربوط به کوکی در مرورگر میشه

MaxLag
18-10-2011, 11:48
پس با این اوصاف باید برم تو کار javascript :
راستی در مورد مطلب قبلی اینا رو پیدا کردم گفتم بد نباشه بزارم.


session.gc_maxlifetime

This value (default 1440 seconds) defines how long an unused PHP session will be kept alive. For example: A user logs in, browses through your application or web site, for hours, for days. No problem. As long as the time between his clicks never exceed 1440 seconds. It's a timeout value.
PHP's session garbage collector runs with a probability defined by session.gc_probability divided by session.gc_divisor. By default this is 1/100, which means that above timeout value is checked with a probability of 1 in 100.
session.cookie_lifetime

This value (default 0, which means until the browser's next restart) defines how long (in seconds) a session cookie will live. Sounds similar to session.gc_maxlifetime, but it's a completely different approach. This value indirectly defines the "absolute" maximum lifetime of a session, whether the user is active or not. If this value is set to 60, every session ends after an hour.

golbarg73
19-10-2011, 20:04
بلهههه:3:
ما هم از خوندن اين مطالب فيض برديم و مبرا شديم لطفکم کم و حجکم مقبول:20: