我有一个简单的Node.js/Express应用程序。为了保存用户身份验证,我使用:
req.session.auth = user;
但是我找到了一个重新生成方法:这里
req.session.regenerate(function (err) {
req.session.auth = user;
});
我的问题是:我应该使用regenerate方法还是只需使用req.session.auth = user;
我有一个简单的Node.js/Express应用程序。为了保存用户身份验证,我使用:
req.session.auth = user;
但是我找到了一个重新生成方法:这里
req.session.regenerate(function (err) {
req.session.auth = user;
});
我更倾向于使用req.session.regenerate
,但这取决于你想要做什么。如果你只是用req.session.auth = user
,那么你会将认证信息存储在会话中。然而,如果你使用regenerate
,你实际上会清除整个会话,然后保存认证信息。
区别在于,使用第一种方法,当前会话中的任何其他会话变量都将持久化。你需要自己判断是否对你的网站有意义,或者是否希望在完成认证后会话保持干净。
req.session.regenerate
来防止会话固定攻击。如果您想/需要保留上一个会话的某些变量,您需要手动复制它们。如果您的网站对用户进行身份验证,每当用户进行身份验证时,应重新生成并重新发送会话cookie,即使已存在。这种方法有助于防止会话固定攻击,其中第三方可以重用用户的会话。
let session = req.session;
req.session.regenerate(function (err) {
req.session.auth = user;
req.session.some_var = session.some_var;
});