2013-02-13 12 views
10

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

new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromMinutes(10) } 

यह लॉगिन के बिंदु से एक समाप्ति प्रदान करता है। यदि हम एक सुरक्षित प्रणाली विकसित कर रहे हैं जिसे कम समय के बाद उपयोगकर्ता को लॉग आउट करना होगा तो हम इसे उपरोक्त उदाहरण की तरह कुछ हफ्तों के डिफ़ॉल्ट से बदल देंगे। लेकिन इसमें समस्या है कि उपयोगकर्ता में लॉगिंग से 10 मिनट काट दिया जाएगा चाहे वे अभी भी आवेदन के साथ बातचीत कर रहे हों या नहीं।

क्या सत्र प्रदाता को सेवाओं के कॉल होने पर समाप्ति समय बढ़ाने के लिए एक सरल तरीका है?

आदर्श रूप से यह हमें विशिष्ट सेवाओं/अनुरोधों के लिए सत्र का विस्तार करने की अनुमति देगा (ताकि सत्र केवल तभी बढ़ाया जा सके जब उपयोगकर्ता सक्रिय रूप से एप्लिकेशन के साथ इंटरैक्ट करता है और इसलिए मतदान सेवाओं को अनदेखा किया जा सकता है)।

अद्यतन

mythz द्वारा दिए गए अब हम एक सरल उपाय है कि नियंत्रण हम extending the ResponseFilterAttribute द्वारा की आवश्यकता के स्तर प्रदान करता है जवाब के आधार पर।

+2

यह आपके प्रश्न का उत्तर नहीं है, लेकिन इसके लिए शब्द "स्लाइडिंग" है। जैसे स्लाइडिंग कैश, स्लाइडिंग सत्र टाइमआउट, आदि – Matthew

उत्तर

10

ServiceStack स्वचालित रूप से "स्लाइडिंग सत्र समाप्ति" का समर्थन नहीं करता है। आपको मूल रूप से प्रत्येक सफल अनुरोध पर सत्र कैश प्रविष्टि को रीसेट करने की आवश्यकता होगी। यानी आप एक प्रतिक्रिया फिल्टर (क्योंकि वे केवल प्रमाणीकृत अनुरोध के लिए मार डाला रहे हैं) हो सकता है सत्र कि विस्तार का असर यह समाप्ति समय से जीवन-समय आ गया है होगा फिर से बचाता है:

var userSession = httpReq.GetSession(); 
httpReq.SaveSession(userSession, slidingExpiryTimeSpan); 

यदि आप जानते हैं आप किस कैशिंग प्रदाता का उपयोग कर रहे हैं, उदाहरण के लिए Redis आप प्रविष्टि को दोबारा पढ़े बिना समाप्ति समय समाप्ति मैन्युअल रूप से अपडेट कर सकते हैं, उदाहरण:

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId()); 
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}" 
+0

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

+0

हाँ मुझे लगता है कि 'EnableSlidingExpiration' विकल्प काम करेगा। – mythz

+2

आशा है कि यह दूसरों के लिए उपयोगी है, [यहां समाधान है] (http://teadriven.me.uk/2013/02/14/sliding- सत्र-in- सेवा- स्टैक) मैं मिथज़ के आधार पर गया सुझाव। – Dan

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