gpt4 book ai didi

node.js - 在 Connect/Express 中使用 cookieSession() 时为 session 设置单独的 maxAge

转载 作者:太空宇宙 更新时间:2023-11-03 22:02:39 24 4
gpt4 key购买 nike

我正在尝试使用 Connect/Express cookieSession() 将我的 node.js session 存储在 cookie 中(从而避免服务器端 session 存储)。这将帮助我在用户登录时“记住”用户,并在服务器重新启动后保持 session 事件。

我想用cookieSession()来做到这一点:

app.use( express.cookieSession( { secret: 'secret_key' } ) );
app.use( function (req, res, next) {
if ( req.method == 'POST' && req.url == '/login' ) {
if ( req.body.remember ) {
req.session.cookie.maxAge = 30*24*60*60*1000; // Rememeber 'me' for 30 days
} else {
req.session.cookie.expires = false;
}
}
next();
});

但是,这不起作用,因为 req.session.cookie 未定义。我也尝试了以下方法,但似乎不起作用:

app.use( express.session( { secret: 'secret_key' } ) );
app.use( function (req, res, next) {
if ( req.method == 'POST' && req.url == '/login' ) {
if ( req.body.remember ) {
req.cookies['connect.sess'].maxAge = 30*24*60*60*1000; // Rememeber 'me' for 30 days
} else {
rreq.cookies['connect.sess'].expires = false;
}
}
next();
});

最佳答案

开始
app.use(express.cookieSession({ secret: config.server.cookieSecret }));

并将其更改为

app.use(function(req, res, next) {
express.cookieSession({
secret: config.server.cookieSecret,
cookie: {
maxAge: req.param('remember') ? 20000 : 3000
},
})(req, res, next);
})

因此,我们创建自己的中间件,围绕 cookieSession 中间件,根据参数更改 maxAge。

因此,每当您更改 session 时,您都需要在 bodyqueryparams 中传递 remember (这就是 req.param() 的外观)。在大多数情况下,您只需在登录时为 session 设置一次user_id

测试并确保其正常工作需要 3 秒或 20 秒。

再说一次,如果您在 session 中设置很多东西,这可能不是很有帮助,但如果您只是在登录时将 user_id 设置为 session ,这就是您所需要的。

如果您要为 session 设置很多内容,您应该知道数据会在每次请求时传递,并且您应该只将最少的内容保存到 session 中,例如 user_id,然后查找每个请求所需的数据,以降低用户的开销。

关于node.js - 在 Connect/Express 中使用 cookieSession() 时为 session 设置单独的 maxAge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15504950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com