كيفية تدقيق عندما يترك مستخدم تطبيق ASP.NET

في ASP.NET ، أبحث عن طريقة لتدوين مستخدم ما من تطبيقي. لكي أكون محددًا ، أرغب في إدراج سجل "تسجيل الخروج" في جدول التدقيق في SQL Server عندما يتم التخلي/تدمير جلسة المستخدم لأي سبب (ليس بالضرورة بسبب استدعاء جلسة عمل. abandon)

لدي فصل "SessionHelper" الذي يدير الجلسة/المستأجرين.

لقد حاولت إعادة النشر في Session_End في Global.asax ، ولكن لم يتم تشغيل هذا الحدث مطلقًا حتى بعد انتهاء المهلة.

لقد حاولت تجاوز "إنهاء" الصف في SessionHelper والقيام به هناك عندما تم تدمير الصف ، ولكنه لم يطلق هذا الحدث أيضًا.

كنت أحاول تطبيق IDisposable في SessionHelper ، ولكن لا أعرف من أين نسميها بحيث يتم الاتصال بها دائمًا.

ما هي الطريقة الصحيحة لتدقيق مستخدم ترك تطبيق ASP.NET الخاص بك؟

شكرا لكم!

2

3 إجابة

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

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

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

لذلك لا يوجد حل مثالي هنا.

2
وأضاف

احرص على التأكد من "الطريقة الصحيحة" ولكن إليك الطريقة التي اتبعتها في الماضي.

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

2
وأضاف
أفعل شيئا مماثلا ، وأنا أستخدم التعامل مع جلسة مقرها ولدي آخر عمود الوصول في الجدول عقد بيانات جلستي. هناك proc مخزنة يتم تشغيلها في كل مرة يتم فيها تعديل سجل الجلسة الذي يقوم بتنظيف جداول أي صفقات جلسة غير مستخدمة غير نشطة أطول من قيمة TIMEOUT سابقة التعريف.
وأضاف المؤلف stephenbayer, مصدر

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

[Id]  [Uid]    [LoginInOn]        [ExpiresOn]  
 1    johndoe  10/14/2008 10:47   10/14/2008 11:07  

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

1
وأضاف