كيف يمكنني استخدام AJAX لتحديد ما إذا كانت جلسة المستخدم قد انتهت صلاحيتها ثم إعادتها إلى صفحة تسجيل الدخول؟

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

سؤال

في السيناريو التالي، كيف يمكنني الاستفادة من AJAX للتحقق مما إذا كانت الجلسة لا تزال نشطة ثم إعادة المستخدم إلى صفحة تسجيل الدخول؟

  1. يقوم المستخدم بتسجيل الدخول ويبدأ العمل
  2. يختفي المستخدم لمدة 10 دقائق وأوقات الجلسة في الخارج
  3. يعود المستخدم إلى جهاز الكمبيوتر الخاص بهم ولا يزال على الشاشة قبل 10 دقائق
  4. The user submits their work, buts get returned to the login screen (by my existing Session state check) and the changes are not persisted

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

هل من الممكن أيضًا القيام بذلك دون استخدام setTimeOut()؟

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

المحلول

معظم إذا كان من الممكن التعامل مع هذا من جانب الخادم.

عندما يكون هناك نشاط مستخدم من جانب الخادم - تحميل الصفحة، أو استدعاء أجاكس، أو أي شيء، قم بتعيين متغير الجلسة

Session["last_activty"]=DateTime.Now;

في مكالمات AJAX وتحميل الصفحة (يمكن القيام بذلك في صفحة رئيسية/صفحة رئيسية متداخلة للصفحات التي تتطلب المصادقة)، حدد (الرمز الزائف)

if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
  Session["logged_in"]=false;

إذا حددت طريقة تحميل الصفحة أو طريقة الويب/خدمة الويب بناءً على ما ورد أعلاه أن المستخدم قد انتهت مهلته أيضًا

أ) إعادة التوجيه إلى صفحة تسجيل الدخول (جانب الخادم)، أو

ب) قم بإرجاع رمز الحالة إلى المتصل الخاص بك في ajax والذي سيؤدي إلى إعادة التوجيه أو عرض مربع حوار تسجيل الدخول.

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

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top