2012-01-26 19 views
6

क्या यह पता लगाने का कोई तरीका है कि कोई सत्र आईडी मौजूदा अनुरोध संदर्भ से मान्य है या नहीं? उसमें, यदि मुझे सत्र आईडी दिया गया है, और मैं वर्तमान में एक एचटीपी अनुरोध द्वारा शुरू किए गए एक और सत्र में हूं और मैं किसी पृष्ठ पर या किसी वर्ग में हूं, तो क्या मैं उस सत्र आईडी को मान्य कर सकता हूं, यदि यह मान्य है और वर्तमान में मौजूद है और त्याग नहीं किया गया है?एएसपी.Net में, क्या मुझे पता चल सकता है कि कोई सत्र सत्र मौजूद है या सत्र आईडी द्वारा मान्य है?

इस का कारण यह है कि हम इस परियोजना मैं पर काम कर रहा हूँ ताकि किसी भी उपयोगकर्ता केवल एक बार में लॉग इन किया जा सकता है के लिए पृष्ठ पर उपयोगकर्ता प्रवेश प्रक्रिया को लॉक करने की जरूरत है, है। इस पर मेरा विचार उपयोगकर्ता तालिका में सत्र आईडी कॉलम जोड़ना था, अगर यह शून्य है, तो वे लॉग आउट हो गए हैं, और जब वे लॉग इन करते हैं और ग्लोबल.एक्सएक्स में सत्र_एंड पर लॉग इन करते हैं तो यह सेट होता है। हालांकि, अगर किसी कारण से किसी सत्र को साफ़ किए बिना छोड़ दिया जाता है, तो मुझे उन्हें फिर से लॉग इन करने में सक्षम होना चाहिए, और उस स्थिति में जब भी वे लॉग इन करते हैं और उसे उस कॉलम में सत्र आईडी मिलती है, तो मुझे लगता है कि इसे किसी भी तरह से करना चाहिए अगर है कि सत्र आईडी सक्रिय और मान्य है देखने के लिए जाँच, अगर नहीं, यह अपने नए सत्र आईडी पर रीसेट और उन्हें में लॉग इन करने की अनुमति देंगे।

धन्यवाद

+0

को सही जवाब मिल गया आप अपने सत्र हमेशा के लिए बनाए रखने की जरूरत है? मतलब है कि एएसपी .NET अंततः समाप्त हो चुके सत्रों को छोड़ देगा। लेकिन उपयोगकर्ता के परिप्रेक्ष्य से आवेदन राज्य हमेशा एक ही रहना चाहिए? – Yuck

+0

हम नहीं करते हैं, हमारे पास 30 मिनट का समय स्लाइडिंग है जिसके लिए उपयोगकर्ता को लॉग इन करने की आवश्यकता होगी। हम किसी भी कुकी आधारित प्रमाणीकरण का उपयोग नहीं कर रहे हैं, केवल सक्रिय सत्र और इसमें उपयोगकर्ता ऑब्जेक्ट संग्रहीत कर रहे हैं। जब सत्र का समय समाप्त होता है, तो वे "लॉग आउट" होते हैं और फिर से लॉग इन करना पड़ता है। –

उत्तर

0

sessionid मान्य का कोई प्रत्यक्ष तरीका नहीं है। विकल्प:

  • आप उस जानकारी तक पहुंच का खुलासा करने के लिए अपना स्वयं का सत्र राज्य प्रदाता (या शायद आईडी प्रबंधक पर्याप्त होगा) लागू कर सकते हैं (http://msdn.microsoft.com/en-us/library/aa479024.aspx)।
  • बस उस आईडी के आधार पर सत्र आईडी कुकी सेट करके धोखा देने का प्रयास करें जो आपको लगता है कि वर्तमान उपयोगकर्ता को पृष्ठ होना चाहिए और पृष्ठ को फिर से प्रस्तुत करना चाहिए। एक दूसरा अनुरोध आप यह देखने में सक्षम होंगे कि क्या आईडी वैध स्थिति से मेल खाती है और यदि आवश्यक हो तो पुनः लॉगिन करें।

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

2

आपको पहले खोजने के लिए डेटाबेस में सत्रों को स्टोर करने की आवश्यकता है।
देखें में अधिक HOW TO: Configure SQL Server to Store ASP.NET Session State

+0

उपरोक्त टिप्पणी में बुरा अंग्रेजी है, लेकिन सही विचार है। यदि आपने अपने सत्र स्थिति के लिए SQL सर्वर का उपयोग किया है तो मुझे लगता है कि यह सत्र आईडी को कॉलम के रूप में संग्रहीत करता है। आप बस इसे देख सकते हैं। – Rocklan

1

एक ही तरीका है मुझे लगता है कि कर सकते हैं के रूप में Neperz कहते हैं और SQLServer सत्र प्रदाता का उपयोग कर, जिसका अर्थ है आप तो एक SQL क्वेरी का उपयोग क्या उपलब्ध है देखने के लिए कर सकते हैं एक डेटाबेस में अपने सत्र स्टोर करने के लिए है।

लेकिन वहाँ कुछ चेतावनियां विचार करने के लिए कर रहे हैं:

  1. मेरा मानना ​​है कि सत्र आईडी सत्र डेटाबेस तालिका में संग्रहीत बिल्कुल सत्र आईडी आप कोड से उपयोग कर सकते हैं के रूप में ही नहीं है। मुझे बिल्कुल याद नहीं है कि मैंने इसे कहाँ पढ़ा है, लेकिन मुझे लगता है कि मैंने इस समस्या का अनुभव किया जब मैं सभी सक्रिय सत्रों की निगरानी करने के लिए कुछ ऐसा कर रहा था।
  2. वैश्विक Session_End घटना अगर SQLServer सत्र प्रदाता का उपयोग कर कभी सक्रिय नहीं होगा।
  3. जब तक आप स्पष्ट रूप से एक सत्र (उपयोगकर्ता लॉग आउट जैसे जब) खत्म करने के लिए अपने कोड में Session.Abandon() उपयोग करते हैं, अपने सत्र के चारों ओर लटका कर सकते हैं जब तक एक SQL एजेंट काम किसी भी समय सीमा समाप्त सत्र साफ़ होता है। इसका अर्थ यह है कि अगर किसी ने अभी अपनी ब्राउज़र विंडो बंद कर दी है तो उनका सत्र अभी भी "सक्रिय" के रूप में दिखाई देगा जो आपके कार्यान्वयन को जटिल बना सकता है।
1

एक अन्य विकल्प आपके पास/था :-) WeakReferences उपयोग करने के लिए होगा:

  • एक Dictionary<youruseridtype,WeakReference> एक सत्र को शुरू करते ही आवेदन [ "mySessionDictionnary"]
  • के रूप में आवेदन के स्तर पर संग्रहीत, आप है यूजर आईडी और वीक रेफरेंस को सत्र ऑब्जेक्ट में डिक्शनरी
  • में जब कोई उपयोगकर्ता लॉग इन करना चाहता है, तो आप उसकी आईडी के लिए डिक्शनरी में चेक करें। यदि सत्र ऑब्जेक्ट में एक खाली खाली वीक रेफरेंस है, तो आप इस मौजूदा सत्र ऑब्जेक्ट को छोड़कर सक्षम कर सकते हैं, यह सुनिश्चित कर लें कि प्रति उपयोगकर्ता एक से अधिक सक्रिय सत्र नहीं हैं।

कमजोरता सुनिश्चित करता है कि आपको स्मृति रिसाव नहीं मिलेगा।

एनबी: यह केवल प्रोप्रेशन सत्र प्रबंधन के साथ काम करेगा। चूंकि डिक्शनरी एक एप्लिकेशन को पुनरारंभ नहीं करेगा, यह सत्रों के लिए समान होना चाहिए।

आशा है कि आप पहले से ही आपकी समस्या ;-)

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