2012-12-27 9 views
8

Da ich ein maxAge beim Aufruf expressServer.use(express.session({params})) nicht definieren, ist der Ablauf des Cookies als "Sitzung" festgelegt.Ändern Sie Cookie-Ablauf in Express

Ich möchte eine "merken mich" -Funktion bei der Anmeldung hinzufügen. Wenn "mich erinnern" ausgewählt ist, wird das Ablaufdatum auf einen Monat verlängert.

Wie würde ich das machen? Ich habe versucht, erstreckt einfach die maxAge, aber das scheint nichts zu tun ...

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

Danke für die Hilfe!

** EDIT **

Ich habe versucht, einen einfachen Server macht ein Benutzer Cookie zu testen, zu aktualisieren. Ich verwende Express 3.0.4

Als ich 127.0.0.1:9000/blah besuchen, den Browser-Cookie "gültig bis" Feld noch "Session" ist ...

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

Allerdings, wenn ich meine Browser-Cookies löschen und besuchen „/ blah“, die „gültig bis“ Feld richtig eingestellt ist. Das macht Sinn, da das Cookie zum ersten Mal gesetzt werden muss :) – user1161657

+1

Ok ... es scheint nur zu funktionieren, wenn ich die Sitzung aktualisiere ... Also habe ich gerade 'request.session.blah = Date()' hinzugefügt und Dinge arbeiten magisch? – user1161657

+0

Sie könnten versuchen, [maxAge mit einem Standardwert zu setzen] (http://www.senchalabs.org/connect/middleware-session.html) und dann das Cookie ablaufen lassen, wenn das Kontrollkästchen nicht aktiviert ist (req.session.cookie .expires = false). – Frank

Antwort

11

ich habe ein Kontrollkästchen, das „mich erinnern“, sagt auf der/Login-Seite:

<p class="remember"> 
    <input type="checkbox" id="remember" name="remember" value="1" /> 
    <label for="remember">Remember me</label> 
</p> 

Da ist in meinem POST Route/login ich einige geistige Gesundheit zu tun Überprüfung und die Sitzung gesetzt, wenn req.body.remember anders eingestellt ist seine nur ein Fenster-Sitzung:

//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; 

Fügen Sie die folgenden Zeilen (ich benutze redis) in app.js:

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

Und das aktualisiert den Cookie im Browser des Clients? – user1161657

+0

Für mich ändert es das Cookie der Sitzung im Backend, ändert aber nichts im Browser: '( – user1161657

+0

Ich habe die Antwort aktualisiert. Ich benutze redis, das ist alles was ich tun musste, um es zum Laufen zu bringen – chovy

2

ich eine answer gefunden, die für mich zu arbeiten scheint; füge es oben auf deinen Routen hinzu.

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

Setzen Sie den Cookie-Namen auf den Wert, der eine Zeichenfolge oder ein Objekt sein kann, das in JSON konvertiert wurde. Die Pfadoption lautet standardmäßig "/".

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

Für weitere Hinweise auf den Link folgenden können

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

5

verwendet werden, wenn Sie Sitzungen mit cookie-sessions in Express 4, konfigurieren Sie die Middleware wie folgt implementieren möchten rollen:

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

Beachten Sie, dass Sie die Option expires nicht festlegen müssen.

Um Ihre Sitzung zu verlängern, verändern einfach es wie folgt aus:

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

Beachten Sie, dass in Express 4 kein req.session.touch() ist.

0

Oder Sie können dies versuchen, es für mich gearbeitet:

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; 
}