您好,我正在使用express.js,目前我一直在使用express-sessions。我的快速会话是这样坐起来的(index.js):
app.use(
session({
secret: 'idegas',
resave: false,
saveUninitialized: false,
cookie: {
maxAge: null,
user_identification: null,
authorized: false,
}
}))
当用户位于登录页面并且用户成功登录时,我想给他们一个会话。现在我使用这个(login.js)来做到这一点:
req.session.cookie.expires = new Date(Date.now() + '7200000')
req.session.cookie.user_identification = id
req.session.cookie.authorized = true
此用户被重定向到仪表板之后,当我想检查用户会话时,它会像这样写回(控制台):
Session {
cookie: {
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
user_identification: null,
authorized: false
}
}
如您所见,没有任何变化。我很困惑为什么这行不通。有任何想法吗?谢谢!
每个会话都有一个唯一的 cookie 对象。这允许您更改每个访问者的会话 cookie。例如,我们可以将 req.session.cookie.expires 设置为 false,以使 cookie 仅在用户代理的持续时间内保留。
此属性用于更改会话 cookie 的行为。
它不能用于添加/更改任何其他cookie
您想使用res.cookie
req.session.cookie
属性用于设置会话(存储在服务器上)的到期日期,而不是存储在用户浏览器中的sessionId cookie。
您可以设置
req.session.cookie.expires = false
使会话立即过期(那么它将是一个会话cookie,当服务器重新启动时它将被删除)。如果您想设置特定的到期日期,请使用 req.session.cookie.maxAge
属性(因为不建议直接将日期设置为 expires
属性)。
如果您希望在 sessionId cookie(存储在用户浏览器中)上设置此到期日期,那么您还必须在会话中间件中设置
rolling: true
选项。
注:
req.session.cookie
并不意味着用作 cookie 来存储数据,因此将数据存储在会话本身上,例如:req.session.user_identification = id
expires
和 maxAge
都在选项(或属性)中设置,则使用对象中定义的最后一个。