2009-09-13 15 views
5

मैं एक एएसपी.Net (एमवीसी) अनुप्रयोग में अंतिम लॉगऑन दिनांक/समय को स्टोर करने के लिए एक सुविधा तैयार कर रहा हूं।उपयोगकर्ता अंतिम लॉगऑन जानकारी संग्रहीत करने के लिए एक अच्छा डिज़ाइन पैटर्न क्या है?

मेरा पहला वृत्ति उपयोगकर्ता के प्रोफाइल रिकॉर्ड के खिलाफ डेटाबेस में मूल्य को संग्रहीत करना और सफल लॉगिन पर वर्तमान दिनांक/समय के मान को अपडेट करना था। बेशक, जैसे ही मैं उस मान को रिकॉर्ड करता हूं, सभी पृष्ठ की तिथि और समय प्रदर्शित करेंगे सत्र के सफल लॉगऑन।

योजना बी: पिछले सत्र को रिकॉर्ड करने के लिए एक फ़ील्ड और इस सत्र को रिकॉर्ड करने के लिए एक फ़ील्ड। लॉगऑन पर, इस सत्र की दिनांक/समय को "वर्तमान" फ़ील्ड में सहेजें और पहले "पिछले" फ़ील्ड (स्पष्ट रूप से) में पाए गए मान को स्थानांतरित करें। यह वह क्षेत्र है जो मेरा "अंतिम लॉग इन" मान प्रदान करता है।

क्या यह सबसे अच्छा तरीका है या इसे और अधिक सुंदर तरीके से किया जा सकता है?

+0

आपको पिछले और वर्तमान लॉगिन समय को स्टोर करने की आवश्यकता क्यों है? –

+0

@ चार्ल्स Conway - केवल अंतिम लॉगिन दिनांक/समय की आवश्यकता है, लेकिन यह वर्तमान लॉगिन दिनांक/समय के साथ अधिलेखित किया जा रहा है। इसका उपयोग 'उपयोगकर्ता द्वारा अंतिम बार 11:52 बजे' लॉग इन किया गया था या 'अंतिम बार लॉग इन करने के बाद से 3 नए आइटम' –

उत्तर

4

लॉग इन करते समय, एक और दृष्टिकोण है, उपयोगकर्ता रिकॉर्ड से अंतिम लॉगिन दिनांक/समय पढ़ें और इसे सत्र या सत्र कुकी में सहेजें। फिर वर्तमान दिनांक/समय के साथ उपयोगकर्ता रिकॉर्ड अद्यतन करें। फिर आपके पृष्ठों पर सत्र/कुकी में संग्रहीत मान पढ़ें।

सत्र समाप्त होने पर पुराना समय हटा दिया जाएगा, आमतौर पर जब उपयोगकर्ता को फिर से लॉगिन करने की आवश्यकता होती है। यह गति और कैशिंग का लाभ भी है क्योंकि यह सत्र/कुकी से पढ़ रहा है।

लेकिन यह आपके सेटअप और ऐप पर निर्भर करता है कि यह आपके लिए संभव है या नहीं।

अद्यतन

बस स्पष्ट होना ... वर्तमान दिनांक/समय में उपयोगकर्ता के लॉग हर बार डेटाबेस उपयोगकर्ता मेज पर एक समान होती है। लेकिन तारीख से पहले/समय उपयोगकर्ता मेज पर लिखा है, मौजूदा मान को पढ़ा जाता है और सत्र या कुकी में सहेजा जाता है। फिर आप वर्तमान टाइमस्टैम्प के साथ उपयोगकर्ता तालिका में दिनांक/समय मान अपडेट करते हैं।

यदि आपका प्रमाणीकरण टिकट सत्र से अधिक समय तक चलता है तो कुकी विधि का उपयोग करें और कुकी की समाप्ति प्रमाणीकरण टिकट की समाप्ति पर सेट करें।

+0

यह होगा कि मैं इस समस्या से कैसे संपर्क करूंगा –

+0

यह केवल ग्राहक पर जानकारी रखेगा। यदि उपयोगकर्ता घर से और काम से लॉग इन करता है, तो जानकारी गलत होगी। आपको इस जानकारी को सर्वर पर जारी रखने की आवश्यकता है। –

+0

इसे सर्वर पर बने रहने की आवश्यकता नहीं है, क्योंकि यह अर्थात् समान है। लॉगिन करने पर केवल एक ही जानकारी जो दिलचस्प है वह पिछली लॉगिन है जो हमेशा वहां होती है - इससे कोई फर्क नहीं पड़ता कि आप कौन सी दृष्टिकोण लेते हैं। – hurikhan77

1

जानने के कुछ अन्य तरीकों से आप यह कर सकते हैं ...

  1. इसके बजाय उपयोगकर्ता के रिकॉर्ड पर एक स्तंभ होने का, तो आप एक अलग तालिका कि हर किसी का लॉगिन लॉग हो सकता था। यदि आपको अंतिम लॉगिन तिथि देखना महत्वपूर्ण है या बाद में रिपोर्टिंग के लिए लॉगिन डेटा पर आंकड़े रखना है, तो यह आपको "अंतिम 5 लॉग इन दिखाएं" सुविधा रखने की क्षमता भी प्रदान करेगा। (यह समय के साथ डेटा का निर्माण करेगा और शायद कुछ प्रकार की क्लीनअप दिनचर्या या शेड्यूल स्क्रिप्ट की आवश्यकता होगी।)

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

  3. यह थोड़ी देर हो गया है, लेकिन एक प्रकार का मिडलवेयर था कि एएसपीनेट आपको बेस क्लास से प्राप्त करने देता है और कोड को लागू करता है जो प्री या पोस्ट सत्र शुरू/अंत को संभालता है। मैंने थोड़ी देर में एएसपी नहीं किया है इसलिए मैं इस पर आलसी हूं।

+0

सत्र_एंड केवल आपके सत्र स्थिति को प्रो में संग्रहीत करते समय काम करता है। यह ध्यान में रखना कुछ है। इसी कारण से मैंने इसका कभी भी उपयोग नहीं किया। – RichardOD

0

एक कस्टम धारावाहिक वर्ग बनाने के बारे में जो इस कार्यक्षमता को लागू करता है?

इस तरह की कक्षा को उपयोगकर्ता की प्रोफ़ाइल पर ब्लॉब के रूप में क्रमबद्ध/deserialized किया जा सकता है। जब तक आपको अंतिम लॉगऑन तिथि पर क्वेरी करने में सक्षम होने की आवश्यकता नहीं है, यह एक अच्छा समाधान हो सकता है।

मेरा पहला विचार यह लागू करने के लिए Stack<T> का उपयोग करना था, लेकिन हालांकि यह क्रमिक है, यह कोई हुक प्रदान नहीं करता है जो स्वचालित रूप से पुराने मानों को बेदखल कर देगा।

संबंधित मुद्दे

 संबंधित मुद्दे