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

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

  •  01-07-2019
  •  | 
  •  

سؤال

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

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

أي اقتراحات؟­­­­­­­­­­­­­­­­­­­­­­­­­­

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

المحلول

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

ثانيًا، الطريقة التقليدية للقيام بذلك هي استخدام علامة "التحديث التعريفي".إضافة هذا إلى الصفحة:

<meta http-equiv="refresh" content="900;url=http://example.com/login"/>

سيتم إرسالهم إلى صفحة تسجيل الدخول بعد 15 دقيقة (900 ثانية).سيؤدي هذا إلى إرسالهم إلى هناك حتى لو كانوا يفعلون شيئًا ما على الصفحة.لا يكتشف النشاط.إنه يعرف فقط المدة التي استغرقتها الصفحة في المتصفح.عادةً ما يكون هذا جيدًا بدرجة كافية لأن الأشخاص لا يستغرقون 15 دقيقة لملء الصفحة (أعتقد أن موقع Stackoverflow.com هو استثناء ملحوظ).

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

<input type="text" onClick="doSomething;">

قم بالوصول إلى نموذج الكائن مباشرة باستخدام

Mozilla way:   element.addEventListener('click' ...)
Microsoft way: element.attachEvent('onclick' ...) 

ثم تأكد من تمرير الأحداث بعد استلامها بحيث تظل التعليمات البرمجية الموجودة تقوم بكل ما يفترض أن تفعله (التحقق من الصحة؟).

http://www.quirksmode.org/js/introevents.html لديه كتابة لائقة حول كيفية القيام بذلك.

--
bmb

نصائح أخرى

يمكنك فقط تسجيل الخروج إذا لم يغير المستخدم الصفحات بعد فترة طويلة.هذا ما يبدو أن نظام Angel Learning Courseware يفعله.

لكن المشكلة الأخرى التي ستواجهها هي أن بعض المستخدمين يقومون بتعطيل JavaScript.

إذا كان بإمكانك وضع كود على الصفحة فهناك أمران:

  • جافا سكريبت تبحث عن حركة الماوس ونشاط لوحة المفاتيح والتمرير.
  • ضع علامة تحديث تعريفية في ملف html - إذا كانت موجودة في تلك الصفحة لأكثر من X دقيقة، فسيتم إعادة التوجيه تلقائيًا إلى صفحة تسجيل الدخول.

إذا كان بإمكانك فقط وضع التعليمات البرمجية على الخادم:

  • احتفظ بجلسة (ملف تعريف الارتباط أو غيره) تتتبع المدة بين تغييرات الصفحة.إذا تم طلب صفحة لفترة أطول من X دقيقة منذ آخر طلب، فلا تخدم الصفحة المطلوبة، بل قم بخدمة صفحة تسجيل الدخول.

يمكنك استخدام تقنيات تحديث التعريف والخادم معًا.ستنتقل الصفحة المحدثة إلى عبارة "جلستك على وشك الانتهاء، انقر هنا للعودة ومواصلة العمل خلال 30 ثانية".

يقوم الزر الذي ينقرون عليه بإعادة تعيين جلسة الخادم الخاص بك، ويقوم بوظيفة إرجاع الصفحة بحيث تظل أي بيانات لديهم (في معظم المتصفحات) موجودة.يتطلب جافا سكريبت على صفحة التحديث، ولكن لا شيء على الصفحة الأصلية - مجرد تحديث التعريف.سيكون تتبع نشاط جافا سكريبت هو الأفضل.

-آدم

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

مع مهلة الجلسة لمدة 5 دقائق، يمكنك إصدار تحذيرات بعد 4 دقائق:

setTimeout(timeoutWarning, 240000);

function timeoutWarning() {
  if(confirm('You have been idle for a while.  Would you like to remain logged in?'))
    window.location.refresh();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top