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

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

جلسة عمل المستخدم

ولدي فئة "SessionHelper" الذي يدير الجلسة اضعي / حاصل.

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

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

وسوف أحاول تنفيذ IDisposable في SessionHelper، ولكن أنا لا أعرف من أين للاتصال على النحو الذي يجعلها دائما يحصل على استدعاء.

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

وشكرا لك!

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

المحلول

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

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

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

وحتى لا الحل الأمثل هنا.

نصائح أخرى

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

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

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

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

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

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