2013-08-26 8 views
12

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

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

क्या आईडी द्वारा एक विशिष्ट अनुप्रयोग सत्र को मारने का कोई तरीका है, जिससे उपयोगकर्ता फिर से लॉग इन कर सकता है?

+1

हालांकि यह वही नहीं है जो आप खोज रहे हैं, यदि आप अक्सर अनुमतियों को बदल रहे हैं, तो आप पेज सत्र के माध्यम से सत्र की लंबाई को बदलने के लिए एक नजर रखना चाहेंगे। टाइमआउट संपत्ति, क्योंकि यह 20 मिनट तक डिफ़ॉल्ट है। – user2366842

+0

मुझे आपका अंक मिला, लेकिन मैं ऐसा नहीं कर सकता। अनुमतियों को अक्सर नहीं बदला जाता है, लेकिन जब ऐसा होता है तो मुझे इसकी आवश्यकता होती है, अद्यतन उसी पल पर प्रभावी होता है, जिससे उपयोगकर्ता फिर से लॉग इन कर सकता है। दुर्भाग्यवश, कुछ उपयोगकर्ता कार्यक्षमता उसके लिए बहुत अधिक समय लेती है। –

+0

यदि आप इन-मेमोरी स्थिति का उपयोग कर रहे हैं तो ब्रूट फोर्स दृष्टिकोण अनुमति परिवर्तनों पर ऐप को पुनरारंभ करना है ... ध्यान दें कि यह उचित आउट-ऑफ-प्रोसेस के साथ काम नहीं करेगा जैसे SQL। –

उत्तर

13
"Is there a way to Kill an specific Application Session by the ID, forcing user to Log in again?" 

नहीं। आप केवल वर्तमान अनुरोध कर उपयोगकर्ता के सत्र वस्तु का उपयोग कर सकते हैं (यानी अपने आप को), नहीं अन्य उपयोगकर्ताओं के सत्र वस्तुओं।

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

एक और विकल्प एक स्थिर संग्रह के साथ-साथ उनके सत्र चर में सभी वर्तमान में लॉग इन उपयोगकर्ताओं की अनुमति ऑब्जेक्ट्स रखना होगा। इस तरह आप उस उपयोगकर्ता के सत्र ऑब्जेक्ट को एक्सेस किए बिना अनुमति ऑब्जेक्ट को बदलने में सक्षम होंगे।

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

+0

धन्यवाद @ गुफा। मैं आपके समाधान का प्रयास करूंगा, क्योंकि मुझे एहसास है कि मैं किसी अन्य उपयोगकर्ता के सत्र ऑब्जेक्ट तक नहीं पहुंच सकता। –

+2

+1 "अन्य प्रयोक्ता सत्र ऑब्जेक्ट्स" पर +1 ... मैं अनुमतियों के लिए "स्टेटिक संग्रह" से बहुत सावधान रहूंगा - क्योंकि किसी भी प्रकार के कैश को वास्तविक स्टोरेज/मशीनों के साथ सिंक में रखने के लिए कोड की आवश्यकता होती है (यदि अधिक से अधिक साइट पर सेवा करता है)। यदि अनुमति जांच की शुद्धता महत्वपूर्ण है तो अनुमति की प्रदर्शन हिट को निगलना आसान हो सकता है। –

+0

@AlexeiLevenkov: अच्छा बिंदु। मैंने स्थैतिक चर के जोखिमों के बारे में एक नोट जोड़ा। – Guffa

1

आप इस में Session.Abandon(); या Session.Clear();

या Session.SessionID[int index];

दुकान विशेष उपयोगकर्ता सत्र मान लिखना और फिर Session.Abandon(); और Session.Clear();

का उपयोग एक विशेष सत्र की हत्या के लिए कर सकते हैं Session.Remove("key");

+3

यह पूरे सत्र को मारता है, सिर्फ एक विशेष टुकड़ा नहीं। –

+0

@ करल एंडरसन: - सही है !! मेरा जवाब भी अपडेट किया गया। सलाह के लिये धन्यवाद!!!!:) –

+1

संभवतः परिदृश्य ओपी को ध्यान में नहीं है - कई उपयोगकर्ता स्वेच्छा से "मुझसे सभी अनुमतियां लेते हैं" निष्पादित नहीं करेंगे, ऐसा लगता है कि "उस उपयोगकर्ता से अनुमतियां दूर करें" ... –

-2

का उपयोग कर की कोशिश Session का एक विशेष टुकड़ा निकालने के लिए, फिर Session.Remove() का उपयोग करें, जैसे वें है:

Session.Remove("YourKey"); 

नोट: यह मूल्य और Session से कुंजी निकाल देता है, आप लोगों को Session["YourKey"] = null; है कि केवल मूल्य निकाल देंगे का उपयोग करके देख सकते हैं, लेकिन कुंजी छोड़ दें। यह हो सकता है कि आप जो चाहते हैं वह हो या न हो, लेकिन सिर्फ भेद को इंगित करना चाहता था।