在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 });
有关链接的更多参考可以使用
我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; }