在Express中更改Cookie到期

因为在调用expressServer.use(express.session({params}))时我没有定义maxAge,所以cookie的到期时间被设置为“Session”。

我想在login时添加“记住我”function。如果select“记住我”,则过期将延长到一个月。

我怎么去做这个? 我试图简单地扩大maxAge,但似乎没有做任何事情…

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

谢谢您的帮助!

** 编辑 **

我试图做一个简单的服务器来testing更新用户的cookie。 我正在使用Express 3.0.4

当我访问127.0.0.1:9000/blah时,浏览器cookie的“过期”字段仍然是“会话”…

 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 ….

我有一个checkbox,在/login页面上显示“记住我”:

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

然后在我的POST路由/login我做了一些理智检查,并设置会话,如果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' })); 

如果要使用快递4中的cookie会话实施滚动会话,请configuration中间件,如下所示:

 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()

将cookie名称设置为value,其中可能是string或转换为JSON的对象。 path选项默认为"/"

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

有关链接的更多参考可以使用

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

我find了一个似乎适合我的答案 。 将其添加到您的路线的顶部。

 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(); 

或者你可以试试这个,它对我有用:

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