2012-12-27 28 views
8

में कुकी समाप्ति बदलें क्योंकि expressServer.use(express.session({params})) पर कॉल करते समय मैंने अधिकतम अधिकतम परिभाषित नहीं किया है, कुकी की समाप्ति "सत्र" के रूप में सेट की गई है।एक्सप्रेस

मैं लॉग इन करते समय "मुझे याद रखें" सुविधा जोड़ना चाहता हूं। अगर "मुझे याद रखें" चुना गया है, तो समाप्ति एक महीने तक बढ़ा दी जाएगी।

मैं यह करने के बारे में कैसे जाउंगा? मैं बस maxAge विस्तार की कोशिश की, लेकिन वह कुछ भी करने को नहीं मालूम था ...

expressServer.get '/blah', (request, response) => 
    request.session.cookie.maxAge = 2592000 
    response.end 'hello there' 

मदद के लिए धन्यवाद!

** संपादित **

मैं किसी उपयोगकर्ता की कुकी को अद्यतन करने का परीक्षण करने के लिए एक सरल सर्वर बनाने की कोशिश की। मैं एक्सप्रेस 3.0.4

उपयोग कर रहा हूँ जब मैं 127.0.0.1:9000/blah ब्राउज़र कुकी की 'समाप्त हो रहा है "क्षेत्र अब भी है" सत्र "पर जाएँ ...

express = require 'express' 

expressServer = express() 
expressServer.use express.cookieParser() 
expressServer.use express.session 
    secret: 'supersecret' 
    cookie: 
     path: '/' 
     httpOnly: true 

expressServer.get '/', (request, response) => 
    response.end 'hello' 

expressServer.get '/blah', (request, response) => 
    request.session.cookie.maxAge = 3600000 
    response.end 'hello again' 

expressServer.listen 9000 
console.log 'server running' 

Grrrrrrr ....

+0

हालांकि, अगर मैं अपने ब्राउज़र कुकी साफ़ करें और जाएँ "/ blah", "समाप्त हो रहा है" फ़ील्ड ठीक से सेट है। जो समझ में आता है, क्योंकि कुकी को पहली बार सेट करने की आवश्यकता है :) – user1161657

+1

ठीक है ... ऐसा लगता है कि अगर मैं सत्र अपडेट करता हूं तो ... केवल इसलिए मैंने 'request.session.blah = Date()' और चीजें जादुई काम करते हैं? – user1161657

+0

आप [अधिकतम मूल्य के साथ maxAge सेट करें] (http://www.senchalabs.org/connect/middleware-session.html) का प्रयास कर सकते हैं और फिर चेकबॉक्स की जांच नहीं होने पर कुकी को समाप्त कर दें (req.session.cookie .expires = झूठा)। – Frank

उत्तर

11

मैं एक चेकबॉक्स कहते हैं कि/प्रवेश पृष्ठ पर "मुझे याद रखें" है:

<p class="remember"> 
    <input type="checkbox" id="remember" name="remember" value="1" /> 
    <label for="remember">Remember me</label> 
</p> 
फिर मेरी पोस्ट मार्ग में

/के लिए लॉग इन मैं जाँच और सत्र सेट कुछ विवेक करते हैं req.body.remember अन्यथा इसके सेट किया गया है बस एक खिड़की सत्र:

//user is authenticated 
    //set session length 
    if (req.body.remember) { 
    var hour = 3600000; 
    req.session.cookie.maxAge = 14 * 24 * hour; //2 weeks 
    } else { 
    req.session.cookie.expires = false; 
    } 

    req.session.userid = user._id; 

app.js में निम्नलिखित कुछ लाइनों (मैं redis का उपयोग करें) जोड़ें:

app.use(express.cookieParser('secret-word')); 
    app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'another-secret' 
    })); 
+0

और यह ग्राहक के ब्राउज़र में कुकी अपडेट करता है? – user1161657

+0

मेरे लिए, यह बैकएंड पर सत्र की कुकी बदलता है, लेकिन वास्तव में ब्राउज़र में कुछ भी नहीं बदलता है: '( – user1161657

+0

मैंने जवाब अपडेट किया। मैं रेडिस का उपयोग कर रहा हूं, यह सब मुझे काम करने के लिए करना है – chovy

2

मैं एक answer मेरे लिए काम करने लगता है कि पाया; इसे अपने मार्गों के शीर्ष पर जोड़ें।

app.all '*', (req,res,next) -> 
    if req.method is 'HEAD' or req.method is 'OPTIONS' 
    next() 
    else 
    req.session._garbage = Date(); 
    req.session.touch(); 
    next(); 
3

कुकी नाम को मूल्य पर सेट करें, जहां स्ट्रिंग या ऑब्जेक्ट JSON में परिवर्तित हो सकता है। पथ विकल्प "/" पर डिफ़ॉल्ट है।

res.cookie('rememberme', '1', 
       { expires: new Date(Date.now() + 900000), httpOnly: true }); 

लिंक का पालन आगे के संदर्भ के लिए इस्तेमाल किया जा सकता

http://expressjs.com/api.html#res.cookie

5

आप एक्सप्रेस 4 में cookie-sessions साथ रोलिंग सत्र लागू करने के लिए, इस तरह मिडलवेयर कॉन्फ़िगर करना चाहते हैं:

app.use(cookieSession({ 
    secret: your_secret, 
    maxAge: your_maxAge, 
    key: 'sessionId' 
})); 

ध्यान दें कि आपको expires विकल्प सेट करने की आवश्यकता नहीं है।

के लिए अपने सत्र का विस्तार करने के लिए, बस इसे इस तरह बदल:

app.get('*', function (req, res, next) { 
    req.session.foobar = Date.now(); 
    next(); 
} 

नोट एक्सप्रेस 4 में है कि वहाँ कोई req.session.touch()

0

या आप इस कोशिश कर सकते हैं, यह मेरे लिए काम किया:

if (req.body.remember) 
{ 
    var oneWeek = 7 * 24 * 3600 * 1000; //1 weeks      
    req.session.cookie.expires = new Date(Date.now() + oneWeek); 
    req.session.cookie.maxAge = oneWeek; 
}