2008-08-21 9 views
8

कोई वेब एप्लिकेशन बनाते समय, और कहें कि आपके पास एक उपयोगकर्ता ऑब्जेक्ट को एक उपयोगकर्ता को इंगित करने वाला ऑब्जेक्ट है, तो उपयोगकर्ता को लॉग इन करने का सबसे अच्छा तरीका क्या है?उपयोगकर्ता विवरण में लॉग इन किया गया

दो तरीके के बारे में मैं किया गया है सोचा है:

  • संग्रहित एक सत्र चर
  • में उपयोगकर्ता डेटाबेस आईडी एक सत्र चर में पूरे उपयोगकर्ता वस्तु संग्रहित

कोई बेहतर सुझाव , उपर्युक्त तरीकों का उपयोग करने के साथ कोई समस्या है? शायद सुरक्षा मुद्दों या स्मृति मुद्दों, आदि,

उत्तर

11

मैं ऑब्जेक्ट की बजाय आईडी को संग्रहीत करने की अनुशंसा करता हूं। नकारात्मकता यह है कि जब भी आप उस उपयोगकर्ता की जानकारी प्राप्त करना चाहते हैं तो आपको डेटाबेस को हिट करना होगा। हालांकि, जब तक कि आपके पृष्ठ में प्रत्येक मिलीसेकंड की गणना न हो, प्रदर्शन एक मुद्दा नहीं होना चाहिए। यहाँ दो फायदे हैं:

  1. उपयोगकर्ता की जानकारी किसी भी तरह बदल जाता है, तो आप अपने सत्र में आउट-ऑफ-डेट जानकारी संग्रहीत नहीं किया जाएगा। उदाहरण के लिए, यदि किसी उपयोगकर्ता को व्यवस्थापक द्वारा अतिरिक्त विशेषाधिकार दिए जाते हैं, तो उन उपयोगकर्ताओं को तुरंत लॉग आउट करने की आवश्यकता के बिना उपलब्ध होगा और फिर वापस लॉग इन करने की आवश्यकता होगी।

  2. यदि आपकी सत्र जानकारी हार्ड ड्राइव पर संग्रहीत की जाती है, तो आप केवल serializable डेटा स्टोर कर सकते हैं। इसलिए यदि आपके उपयोगकर्ता ऑब्जेक्ट में कभी भी डेटाबेस कनेक्शन, खुली सॉकेट, फ़ाइल डिस्क्रिप्टर इत्यादि जैसी कुछ भी शामिल है, तो यह ठीक से संग्रहीत नहीं किया जाएगा और इसे ठीक से साफ़ नहीं किया जा सकता है।

ज्यादातर मामलों में ये चिंताएं कोई समस्या नहीं होगी और या तो दृष्टिकोण ठीक होगा।

2

बस याद रखें कि यदि आप सत्र में सभी उपयोगकर्ता के गुणों (यह अनुमतियों तक फैली हुई है) को स्टोर करते हैं, तो उपयोगकर्ता में कोई भी परिवर्तन तब तक प्रभावी नहीं होगा जब तक कि वे फिर से लॉगिन न करें ।

व्यक्तिगत रूप से, मैं त्वरित संदर्भ के लिए नाम और आईडी संग्रहीत करता हूं, और जब मुझे आवश्यकता होती है तो बाकी को लाता है।

1

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं। यदि आप ASP.net का उपयोग कर रहे हैं, तो मैं निश्चित रूप से FormsAuthentication कक्षा और सभी अंतर्निर्मित (और विस्तार योग्य) कार्यक्षमता पर एक नज़र डालेंगे जिसका उपयोग आप अपनी लॉग-इन उपयोगकर्ता सेटिंग्स को संग्रहीत करने के लिए कर सकते हैं।

1

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

0

मैं आमतौर पर सत्र में उपयोगकर्ता को स्टोर करता हूं। परिवर्तन नहीं करने के बाद, एक नई प्रतिलिपि के साथ सत्र में ऑब्जेक्ट को प्रतिस्थापित करके लॉगिन समस्या को तब तक हल नहीं किया जा सकता है।

0

हमारी उपयोगकर्ता वस्तु काफी हल्का है इसलिए हमने इसे एक सत्र चर में स्टोर करने का विकल्प चुना। सुनिश्चित नहीं है कि यह सबसे कुशल है लेकिन अब तक यह बहुत अच्छी तरह से काम कर रहा है।

6

सुरक्षा के लिए, मैं एक सत्र आईडी (या तो एक GUID या क्रिप्टोग्राफिक रूप से सुरक्षित आरएनजी) उत्पन्न करता हूं और एक टेबल है जो उपयोगकर्ता आईडी में सत्र आईडी को मानचित्र करता है।फिर, आप बस अपनी कुकीज़ में सत्र आईडी संग्रहीत करते हैं, और यह उपयोगकर्ता आईडी के लिए प्रॉक्सी के रूप में कार्य करता है।

|Session |UserID |
|--------+-------|
|a1d4e...+ 12345 |
|--------+-------|
|c64b2...+ 23456 |
|--------+-------|

इस के साथ

, कोई भी उनके आईडी का अनुमान लगाकर एक और प्रयोक्ता का रूप धारण कर सकते हैं। यह आपको उपयोगकर्ताओं के सत्रों को सीमित करने देता है ताकि उन्हें हर बार लॉग इन करना होगा (दो सप्ताह सामान्य है)। और यदि आप अपने सत्र के बारे में अन्य डेटा स्टोर करना चाहते हैं, तो आप इसे केवल इस तालिका में जोड़ सकते हैं।

1

मैं उपयोगकर्ता आईडी और सत्र आईडी का एक हैश वैल्यू संग्रहीत करता हूं और उसके बाद डेटाबेस में सत्र तालिका में मेल खाता हूं। इस तरह सत्र डेटा को खराब करना मुश्किल होगा। क्या मैं अतिरिक्त जांच के रूप में आईपी पर भी जांच कर सकता हूं।

यकीन नहीं है कि मैं एक सत्र चर में संग्रहीत उपयोगकर्ता आईडी पर भरोसा करना चाहता हूं और विश्वास करता हूं कि यह उपयोगकर्ता था क्योंकि इसे काफी आसानी से बदला जा सकता था और दूसरे सदस्य के रूप में पहुंच प्राप्त हो सकता है