एक्सप्रेसजेएस में एक सत्र को कैसे समाप्त किया जाए


88

मुझे ऐसा लगता है कि इसे प्रलेखन में कहीं दफन किया जाना है, लेकिन मैं इसे नहीं पा सकता हूं।

आप एक्सप्रेसजेएस में एक सत्र को कैसे बंद या समाप्त या मार सकते हैं (जो भी)?

जवाबों:


121

एक्सप्रेस 4.x अपडेटेड उत्तर

सत्र हैंडलिंग अब एक्सप्रेस में नहीं बनाई गई है। यह उत्तर मानक सत्र मॉड्यूल को संदर्भित करता है: https://github.com/expressjs/session

सत्र डेटा साफ़ करने के लिए, बस उपयोग करें:

req.session.destroy();

इस पर प्रलेखन थोड़ा बेकार है। इसे कहते हैं:

सत्र को नष्ट कर देता है, req.session को हटाकर, अगले अनुरोध को फिर से जेनरेट किया जाएगा। req.session.destroy(function(err) { // cannot access session here })

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


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

1
@MuhammadUmer जहां तक ​​मुझे पता है, एक मनमाना सत्र को नष्ट करने के लिए कोई अंतर्निहित तंत्र नहीं है। आप सत्र से जुड़ी कुंजी को स्टोरेज से हटाकर, या अपना स्वयं का सत्र आवरण बनाकर आसानी से लागू कर सकते हैं।
ब्रैड

93

कोई बात नहीं, यह है req.session.destroy();


8
यह मेरे लिए एक्सप्रेस 3 पर काम नहीं कर रहा है .. मैं qreq.session.destroy ()
working

6
एक्सप्रेसजेएस 3.00 पर मेरे लिए काम करना ठीक है। प्रयुक्त req.session.destroy();रूप acidghost किया था।
हेक्सासैनाइड 16

1
req.session.destroy () का उपयोग एक्सप्रेस 2.5 में भी मेरे लिए काम करता है
21

1
यह कहाँ प्रलेखित है? मैं इसे खोजने की कोशिश कर रहा हूं।
ह्यूगी

25

यह प्रश्न स्पष्ट नहीं हुआ कि किस प्रकार के सत्र स्टोर का उपयोग किया जा रहा है। दोनों उत्तर सही प्रतीत होते हैं।

कुकी आधारित सत्रों के लिए:

से http://expressjs.com/api.html#cookieSession

req.session = null // Deletes the cookie.

रेडिस, आदि आधारित सत्रों के लिए:

req.session.destroy // Deletes the session in the database.

1
req.session.destroy अनिवार्य रूप से "हटाएं req.session" के लिए एक आवरण है, यहां स्रोत-कोड देखें: github.com/expressjs/session/blob/master/session/session.js
tfmontague


6

उपयोग,

delete req.session.yoursessionname;

मैं वास्तव में इस बारे में एक दस्तावेज देखना चाहूंगा।
आलसी

5
उन सभी डाउन वोटिंग के लिए @ निथिन; session.destroy () फंक्शन-मेथड as github (github.com/expressjs/session/blob/master/session/session.js) पर डॉक्यूमेंट किया गया है, जो "delete this.req.session" का उपयोग करता है - यह वास्तव में @ नितिन का जवाब नहीं है, लेकिन "डिलीट" का उपयोग करना एक सही समाधान है (और अन्य उत्तरों में शामिल नहीं है)।
tfmontague

क्या यह एक उचित समाधान है? कोई मेमोरी लीकेज, कुछ भी शरारती चीजें सही नहीं होंगी?
राजथ

5

का उपयोग करना req.session = null;, वास्तव में सत्र उदाहरण को नष्ट नहीं करेगा। सबसे उचित समाधान होगा req.session.destroy();, लेकिन यह अनिवार्य रूप से के लिए एक आवरण है delete req.session;

https://github.com/expressjs/session/blob/master/session/session.js

Session.prototype.destroy = function(fn){
  delete this.req.session;
  this.req.sessionStore.destroy(this.id, fn);
  return this;
};

5

Session.destroy (कॉलबैक)

सत्र को नष्ट कर देता है और req.session संपत्ति को परेशान करेगा। एक बार पूरा हो जाने पर, कॉलबैक लागू किया जाएगा।

सुरक्षित तरीका ↓ ↓

req.session.destroy((err) => {
  res.redirect('/') // will always fire after session is destroyed
})

S असुरक्षित तरीका ure ure

req.logout();
res.redirect('/') // can be called before logout is done

0
req.session.destroy(); 

ऊपर वाले ने मेरे लिए काम नहीं किया इसलिए मैंने ऐसा किया।

req.session.cookie.expires = new Date().getTime();

वर्तमान समय में कुकी की समाप्ति की समय सीमा निर्धारित करके, सत्र अपने आप समाप्त हो गया।


-5

जैसा कि कई स्थानों पर उल्लेख किया गया है, मैं भी सही ढंग से काम करने के लिए req.session.destroy () फ़ंक्शन प्राप्त करने में सक्षम नहीं हूं।

यह मेरा काम है .. लगता है कि चाल है, और अभी भी req.flash का उपयोग करने की अनुमति देता है

req.session = {};

यदि आप req.session = null को हटाते या सेट करते हैं; , लगता है तो आप req.flash का उपयोग नहीं कर सकते


1
यह एक सुरक्षा मुद्दा है, क्योंकि यह सत्र हैश को परिवर्तित नहीं करता है
Tosh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.