كيف يتجاهل المرء متغير جلسة أثناء إغلاق صفحة الويب؟

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

سؤال

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

كيف يمكنني التخلص من متغيرات الجلسة هذه أثناء الإغلاق؟ أي اقتراحات بشأن هذه التقنية أو كيفية حل هذه المشكلة؟

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

المحلول

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

يمكنني التفكير في 3 طرق ممكنة لحل (أو العمل حولها) هذه المشكلة:

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

2 - بدلا من وضع البيانات في الجلسة، ضعها في مخبأ (مع انخفاض انزلاق المنزلق انتهاء الصلاحية). في صفحتك، يمكنك الوصول إلى البيانات الخاصة بك بنفس الطريقة من الجلسة، أي البيانات = ذاكرة التخزين المؤقت ["البيانات" ["البيانات"]، ولكن عليك أن تكون مستعدا لأن البيانات تمت إزالة البيانات من ذاكرة التخزين المؤقت (عليك إعادة تحميلها مرة أخرى من DB على سبيل المثال)، إذا كان الوقت بين طلبين أكبر من وقت انتهاء الصلاحية.

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

نصائح أخرى

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

إذا كنت تستخدم جلسات ASP.NET (التي ربما تكون موجودا)، فيمكنك إضافة ملف Global.asax إلى Soluting الخاص بك. في هناك، يجب العثور على هذا المندوب (إن لم يكن، خلقها):

protected void Session_End(object sender, EventArgs e)
{

}

.. هنا يمكنك مسح مجموعة الجلسة الخاصة بك.

    protected void Session_End(object sender, EventArgs e)
    {
        Session.Clear();
    }

سيتم إطلاق هذا عند انتهاء الجلسة أو عندما ينقر المستخدم على تسجيل الخروج :)

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