NodeJS 加载新页面时未定义连接会话

x6492ojm  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(213)

我对会话有点陌生,现在当我尝试使用它们时,会话总是未定义的,例如在成功登录后进入下一页时。
如果登录成功,我将执行以下操作:

var session = req.session;
session.user_id = String(item._id);
session.user_secure = security.security(session.user_id);

然后我重定向到另一个页面:

res.writeHead(302, {
    'Location': '/backstageArea'
});
res.end();

然后我尝试再次找到会话,这样做:

var session = req.session;

console.log("uid: " + String(session.user_id));
console.log("hid: " + session.user_secure);

这导致会话未定义。
这是我在我的app.configure中的最后三件事:

app.use(express.cookieParser());
app.use(express.session({secret: 'secret', store: store, key: 'sid', cookie:{secure:true}}));
app.use(app.router);

可能是因为我重定向到一个新的页面,我失去了会话?还是我做错了什么?

d5vmydt9

d5vmydt91#

通过使用cookie:{secure:true},您可以告诉express应用程序和浏览器仅通过https发送该cookie。
因此,如果您不使用https,则可以删除secure: true
安全cookie是保护敏感cookie免受中间人攻击的有用功能,当您在同一个域上使用httphttps时,它们更加有用。
如果你想通过nginxapache使用https,你可能需要:

app.set('trust proxy', true); // if remove this line, express will refuse to send https cookie to nginx or apache
k3fezbri

k3fezbri2#

var session = req.session;
session.user_id = String(item._id);
session.user_secure = security.security(session.user_id);

编辑为

req.session.user_id = String(item._id);
req.session.user_secure = security.security(session.user_id);

相关问题