2011-03-16 10 views
9

मैं उसी उपयोगकर्ता के एकाधिक लॉगिन को रोकना चाहता था। इसलिए, मैंने एक टेबल बनाई है जो लॉग इन करने वाले उपयोगकर्ताओं का ट्रैक रखती है। जब वे लॉग इन करते हैं, तो डेटा तालिका में दर्ज किया जाएगा। जब वे लॉगआउट पर क्लिक करते हैं, तो डेटा और सत्र हटा दिया जाएगा।उसी उपयोगकर्ता के लिए एकाधिक लॉगिन से बचने के लिए कैसे करें

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

क्या इसे संभालने का कोई बेहतर तरीका है?

+0

क्या आप 'माइक्रोसॉफ्ट एसक्यूएल सर्वर' या 'MySQL' का उपयोग कर रहे हैं? मैंने 'MySQL' टैग अस्थायी को हटा दिया है क्योंकि मुझे लगता है कि आप' SQL सर्वर' का उपयोग कर रहे हैं। अपने प्रश्न में सही टैग जोड़ने के लिए स्वतंत्र महसूस करें। – Bobby

+0

इसका एसक्यूएल सर्वर 2005 – Kanishka

उत्तर

6

आप global.asax.cs फ़ाइल

protected void Session_End(Object sender, EventArgs e) 
{ 
    //delete from database where userID = Session["userID"] 
} 
+0

Ty में उपयोगकर्ता प्रविष्टि से इसे रिमोट करते हैं तो आप अपना खुद का कटऑम कोड सेट कर सकते हैं। मैंने ऐसा करने की कोशिश की। यह तभी काम करेगा जब उपयोगकर्ता लॉगआउट पर क्लिक करेगा। – Kanishka

+0

@ हरहाहर, उपरोक्त उल्लिखित समाधान सही है, और जब सर्वर पर स्वचालित टाइमआउट होता है तो यह आग लग जाएगा। यानी, यदि आपने टाइमआउट अवधि 10 मिनट तक सेट की है। Session_End एक सत्र आईडी –

+0

द्वारा की गई अंतिम गतिविधि के 10 मिनट के बाद आग लग जाएगी जो सत्र मोड का उपयोग करना चाहिए? मैं डीबी के लिए एसक्यूएल सर्वर का उपयोग कर रहा हूँ। क्या मुझे एसक्यूएल सर्वर मोड या इनप्रोक मोड का उपयोग करना है? – Kanishka

1

KEAP आप सत्र समय बाहर कम और बाहर स्वत: जब सत्र diposed है लॉग उपयोगकर्ता

+0

जो डेटाबेस से डेटा नहीं हटाएगा। –

+0

जब आप इसे खुश करते हैं और डेटाबेस – kalvis

0

में वैश्विक घटना Session_End पर तालिका में inforamtion को हटाना होगा बस एक सत्र चर कहावत रखने लॉगिन स्थिति के आधार पर true/false। सही - उपयोगकर्ता पहले से लॉग इन है, गलत - लॉग इन नहीं है।

कई मामलों में मेरे पास उपयोगकर्ता ऑब्जेक्ट सत्र में सहेजा गया है, इसलिए मैं इसे null के विरुद्ध जांचता हूं, जो केवल प्रमाणित उपयोगकर्ता या शून्य (अनाम) ।

पर्याप्त सरल और डीबी के बिना शामिल।

संपादित:

तो टिप्पणी नीचे सही ढंग से तो कृपया इस समस्या को समझने के लिए इस सवाल का जवाब के बावजूद। मैं उस स्थिति का जिक्र कर रहा था जब आप एक प्रमाणित उपयोगकर्ता को उसी सत्र के दौरान फिर से लॉग इन नहीं करना चाहते थे।

+0

मुझे नहीं लगता कि आप सही तरीके से प्रश्न समझ गए हैं। वह यह जांचना नहीं चाहता कि उपयोगकर्ता लॉग इन है, तो वह यह सुनिश्चित करना चाहता है कि उपयोगकर्ता केवल एक बार लॉग इन हो। –

+0

एक सत्र चर क्लाइंट के विभिन्न उदाहरणों को सूचित नहीं करेगा कि उन्होंने लॉग इन किया है या नहीं –

+0

मैं समझता हूं और मैंने अपनी पोस्ट को सही किया है। – Tengiz

2

हम के बारे में बात कर रहे हैं की तुलना में 'StateServer या SQLServer' सत्र मोड: एक बार आप Session.Abandon() फोन

Session_End ईवेंट को सक्रिय होगा। एसक्यूएल सर्वर पर ASPState_Job_DeleteExpiredSessions नौकरी है, जो उपयोगकर्ता सत्र को समाप्त कर देता है यदि उपयोगकर्ता लॉगआउट बटन का उपयोग करके लॉग आउट नहीं होता है। यह जॉब कॉल DeleteExpiredSessions संग्रहित प्रक्रिया है, इसलिए मुझे लगता है कि आपको इस संग्रहीत प्रक्रिया में कुछ तर्क (लॉग इन उपयोगकर्ता को हटा देना चाहिए) रखना चाहिए।

documentation से

:

आप Global.asax फ़ाइल के लिए Session_OnEnd नाम के एक सबरूटीन जोड़कर Session_OnEnd घटना संभाल कर सकते हैं। सत्र_ऑनएंड सबराउटिन चलाया जाता है जब Abandon विधि कहा जाता है या जब सत्र समाप्त हो जाता है। एक सत्र समाप्त हो जाता है जब द्वारा निर्दिष्ट मिनटों की संख्या टाइमआउट प्रॉपर्टी सत्र के लिए अनुरोध किए बिना अनुरोध करती है।

Session_OnEnd घटना समर्थित है केवल जब सत्र स्थिति मोड संपत्ति inproc पर सेट किया जाता है, जो डिफ़ॉल्ट है। यदि सत्र स्थिति मोड राज्य सर्वर या SQL सर्वर है, तो Global.asax फ़ाइल में सत्र_ऑनएंड ईवेंट को अनदेखा किया गया है।यदि सत्र स्थिति मोड कस्टम पर सेट है, तो Session_OnEnd ईवेंट कस्टम सत्र-राज्य स्टोर प्रदाता द्वारा निर्धारित का समर्थन करें।

आप इस तरह के एक उपयोगकर्ता है कि है SessionID मूल्य से कोई डेटा स्रोत में ट्रैक के लिए जानकारी के रूप में सत्र से संबंधित जानकारी को साफ करने के Session_OnEnd घटना का उपयोग कर सकते हैं।

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

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