تسجيل الدخول، تسجيل الخروج ومدة الوقت في php و mysql؟

StackOverflow https://stackoverflow.com/questions/1837934

سؤال

أرغب في تخزين وقت تسجيل الدخول والخروج والوقت في قاعدة البيانات.

  • يتم إنشاء وقت تسجيل الدخول عند مصادقة المستخدم (تسجيل الدخول بنجاح)
  • يتم إنشاء وقت تسجيل الخروج عند النقر فوق المستخدم على زر تسجيل الخروج
  • المدة هي تسجيل الخروج - وقت تسجيل الدخول. (تسجيل الخروج ناقص تسجيل الدخول)

لكن المشكلة هي، ماذا لو لم يضغط المستخدم على زر تسجيل الخروج. فيما يلي المواقف:

  • فقدان الإنترنت
  • أغلق المتصفح / علامة التبويب. (أحتاج إلى أن هذا يجب أن يستخدم جافا سكريبت، لكنني لا أفعل ذلك، أي فكرة؟)

تعديل:

نسيت إضافة شيء إلى السؤال، البرنامج هو برنامج فلاش كامل، لا يوجد ملاءمة إلى صفحة أخرى. 1 صفحة فقط

هل كانت مفيدة؟

المحلول

لا يمكنك الاعتماد على تلقي حدث للمستخدم تسجيل الخروج، إذا قام ببساطة بإغلاق متصفحهم، أو تختفي من الإنترنت.

في هذه الحالة، يجب أن يكون لديك مهلة جلسة من نوعها، وتسجيل الخروج عند يدرك تطبيقك جلستها قديمة جدا.

إذا كان هذا شرطا حقيقيا، فأنا أقول إنك بحاجة إلى وظيفة "كرون" مراقبة جلسات المهلة. عندما انتهت مهلة جلسة، إذا تم تسجيل الدخول، فسيقبط حدث "تسجيل الخروج" لهذا المستخدم.

لاحظ أنه لا يمكنك استخدامه (على سبيل المثال) حدث Session_end ASPNETS، لأنه لن يسمى بشكل موثوق إما (على سبيل المثال إذا تم إعادة تشغيل عملية الخادم).

خيار آخر هو إضافة وقت تسجيل الخروج في المرة القادمة التي يقوم فيها المستخدم بتسجيل الدخول - عند تسجيل الدخول، يمكنك التحقق من الجلسات القديمة وفترض أن أي ما لم يتم إغلاقه لمقدار مبلغ ثابت منذ أن سجلت الصفحة الأخيرة.

هذا حقا كل ما يمكنك القيام به.

نصائح أخرى

من المهم أن نتذكر أن جميع وظائف الجلسة / تسجيل الدخول في PHP هي مستخدم كوكي مقرها. لذلك، يجب أن يحل تغيير عمر ملف تعريف الارتباط في الجلسة مشكلتك:

http://us3.php.net/manual/en/function.session-set-cookie-params.php.

أيضا، يمكنك تعيين جلسات PHP حتى يستخدمون ملفات تعريف الارتباط فقط:

http://us2.php.net/manual/en/session.configuration.php#ini.session.use-cookies.

مرة أخرى، يمكنك التقاط نافذة المتصفح / علامة التبويب إغلاق ولكن ... لماذا؟ على سبيل المثال، قد يكون لديك موقعك مفتوحا في علامات تبويب متعددة. إذا أغلقت أحد علامات التبويب هذه، فهل يجب تسجيل الدخول تلقائيا من موقع الويب الخاص بك؟ هذا تصميم سيء للغاية. بدلا من ذلك، قم بتعيين مدى الحياة الجلسة حتى تنتهي متصفح مغلقة وليس مجرد علامة تبويب. (لاحظ أيضا ذلك window.unload سوف تسجيل الخروج متى أي نافذة على موقعك يغلق - بما في ذلك المنبثقة أو iFrame. هل تريد ذلك حقا؟)

http://us2.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime.

إذا كنت ترغب في تخزين حالة الجلسة في قاعدة بيانات، فجرب أي واحد من هؤلاء خطوط إرشاد. وبعد أو، لفة الخاصة بك مع session_set_save_handler.

فيما يتعلق بإغلاق المتصفح / علامة التبويب، يمكنك ربط unload حدث (window.onunload, ، jQuery $(window).unload(fn), ، أو أي شيء آخر) لإعلام الخادم الخاص بك. سيكون هناك حلا أكثر للأغراض العامة هو في بينغ الخادم بشكل دوري (على سبيل المثال، كل 5 دقائق)، ولكن قد يكون مزعج للمستخدم، لذلك يفعل ذلك بحكمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top