उपयोगकर्ता द्वारा ASP.NET ऐप छोड़ने पर ऑडिट कैसे करें

एएसपी.नेट में, मैं अपने आवेदन को छोड़कर उपयोगकर्ता को ऑडिट करने का एक तरीका ढूंढ रहा हूं। विशिष्ट होने के लिए, मैं SQL सर्वर में ऑडिट तालिका में 'लॉगआउट' रिकॉर्ड डालना चाहता हूं जब किसी भी कारण से उपयोगकर्ता का सत्र छोड़ दिया/नष्ट हो जाता है (जरूरी नहीं कि सत्र.बैंडन पर कॉल करें)

मेरे पास 'सत्रहेल्पर' वर्ग है जो सत्र सेटर्स/गेटर्स का प्रबंधन करता है।

मैंने Global.asax में सत्र_एंड में वापस पोस्ट करने का प्रयास किया है, लेकिन टाइमआउट की समयसीमा समाप्त होने के बाद भी इस घटना को कभी नहीं निकाल दिया गया।

मैंने सत्र हेल्पर वर्ग में 'अंतिमकरण' को ओवरराइड करने की कोशिश की है और कक्षा को नष्ट होने पर वहां कर रहा है, लेकिन यह उस घटना को भी नहीं चला।

मैं सत्र हेल्पर में IDISposable लागू करने का प्रयास करता हूं, लेकिन मुझे नहीं पता कि इसे कहां कॉल करना है ताकि इसे हमेशा बुलाया जा सके।

आपके एएसपी.NET एप्लिकेशन को छोड़कर उपयोगकर्ता को ऑडिट करने का उचित तरीका क्या है?

धन्यवाद!

2

3 उत्तर

सत्र_इंड इवेंट केवल तभी निकाल दिया जाता है जब आपके पास इनप्रोक सत्र हों। एसक्यूएल या राज्य सर्वर सत्र प्रबंधन इस घटना को आग नहीं करेगा। यदि आप कर सकते हैं, तो इनप्रोक सत्रों पर वापस आएं और इस घटना का उपयोग करें।

इसके अलावा, आपको बहुत अच्छे समाधान नहीं मिलेंगे। एएसपी.नेट सर्वर पर सत्रों की वर्तमान सूची को देखने का कोई तरीका नहीं प्रदान करता है (कम से कम, स्टैक ओवरफ्लो के उपयोगकर्ताओं को पता नहीं है, क्योंकि मैंने पहले से ही सवाल पूछा है), इसलिए आप नौकरी का उपयोग नहीं कर सकते जांचें कि वे कब नष्ट हो गए हैं।

अगली सबसे अच्छी बात यह है कि आपके उपयोगकर्ताओं के लिए कहीं भी "अंतिम एक्सेस टाइम" संग्रहीत किया जाए और सत्र के टाइमआउट का पता लगाने के लिए इसका उपयोग किया जाए। इस तरह के नौकरी के कार्यान्वयन जटिल हैं हालांकि (यदि उपयोगकर्ता उपयोगकर्ता उदाहरण के लिए तेजी से लॉग इन करता है तो आप लॉगआउट ईवेंट को याद कर सकते हैं) ...

तो यहां कोई सही समाधान नहीं है।

2
जोड़ा

"उचित तरीके" के बारे में ध्यान दें लेकिन यहां मैंने इसे अतीत में कैसे किया है।

डेटाबेस में उपयोगकर्ता रिकॉर्ड से जुड़े एक "सक्रिय" दिनांक-समय टिकट है। प्रत्येक बार उपयोगकर्ता एक पृष्ठ तक पहुंचता है, जिसे वर्तमान समय में अपडेट किया जाता है। अगर किसी ने 15 मिनट में पृष्ठ तक नहीं पहुंचाया है, तो उस उपयोगकर्ता को "लॉगआउट" ईवेंट के रूप में रिकॉर्ड किया गया है, और टाइमस्टैम्प न्यूल पर सेट है।

2
जोड़ा
मैं कुछ ऐसा ही करता हूं, मैं एसक्यूएल आधारित सत्र हैंडलिंग का उपयोग करता हूं और मेरे सत्र डेटा वाले टेबल में अंतिम एक्सेस कॉलम होता है। एक संग्रहित प्रो है जो हर बार एक सत्र रिकॉर्ड संशोधित होती है जो किसी भी अप्रयुक्त सत्र पंक्तियों की तालिका को पूर्वनिर्धारित TIMEOUT मान से अधिक निष्क्रिय निष्क्रिय करती है।
जोड़ा लेखक stephenbayer, स्रोत

सबसे अच्छा आपके लॉगआउट रिकॉर्ड एक बुद्धिमान अनुमान होने जा रहा है, भले ही आप सत्र की घटनाओं को सही ढंग से काम करने के लिए प्राप्त करते हैं, जब उपयोगकर्ता ने आपकी साइट/ऐप छोड़ा था। एक तकनीक जिसका आप उपयोग कर सकते हैं वह लॉगआउट समय को डीबी में डालने के लिए होता है जब उपयोगकर्ता लॉग इन करता है, और सिस्टम का उपयोग करते समय भविष्य के साथ रिकॉर्ड अपडेट करना जारी रखता है। यहां हाल ही में उपयोग की जाने वाली सत्र तालिका की सामान्य स्कीमा है:

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

इस तालिका में मैं केवल एक्सपियरऑन कॉलम को अद्यतन करता रहता हूं क्योंकि उपयोगकर्ता एप्लिकेशन (वर्तमान समय + 20 मिनट) के साथ इंटरैक्ट करता है। यदि वे ExpiresOn के बाद बातचीत करने का प्रयास करते हैं, तो मुझे पता है कि वे 20 मिनट के लिए निष्क्रिय थे और एक नया लॉगिन लागू करते थे। रिपोर्टिंग उद्देश्यों के लिए, मुझे पता है कि उपयोगकर्ता ने लॉग आउट किया है यदि वर्तमान समय ExpiresOn से अधिक है। आप इससे अधिक जटिल हो सकते हैं। उदाहरण के लिए, मैं अपने डेटा को नियमित प्रक्रिया के साथ एक रिपोर्टिंग तालिका में ऊपर सूचीबद्ध सत्र तालिका से बाहर ले जाता हूं। यह केवल सत्र तालिका को छोटा रखने के लिए है, क्योंकि बहुत सी चीजें इसके साथ बातचीत करती हैं।

1
जोड़ा