我使用express-session来设置一个带有redis会话存储的会话cookie。当用户登录时,我可以成功地设置一个cookie,如图所示,通过点击chrome中页面url旁边的“锁定”图标并查看cookie来登录他们。但是,当页面刷新时,我的用户会注销,因为cookie已经消失。
如何防止页面刷新时丢失该Cookie?
我的会话选项减去我的路由看起来像这样,我在https上运行我的客户端。
let sessionOptions = {
secret: "REDACTED_FROM_STACKOVERFLOW",
resave: true,
name: "redisSession",
expires: new Date(Date.now() + (60 * 1000 * 60 * 100000)),
store: new RedisStore({client: redisClient}),
cookie: {
sameSite: 'none',
secure: true,
httpOnly: true,
maxAge: 1000 * 60 * 1000
},
rolling: true,
saveUninitialized: true
};
app.use(cors({credentials: true, origin: 'https://localhost:8080'}));
const httpsOptions = {
key: fs.readFileSync(process.env.localHostCertKeyPath),
cert: fs.readFileSync(process.env.localHostPemPath)
}
app.use(cookieParser("REDACTED_FROM_STACKOVERFLOW"));
const httpsOptions = {
key: fs.readFileSync(process.env.localHostCertKeyPath),
cert: fs.readFileSync(process.env.localHostPemPath)
}
const server = https.createServer(httpsOptions, app).listen(
constants.LOCAL_PORT,
constants.HOST_NAME,
() => {
console.log("https://" + constants.HOST_NAME + ':' + constants.LOCAL_PORT + '/');
}
);
字符串
- Redis的日志显示没有错误。
- cookie已设置。只是后来被删除了。我的登录和注销路由工作。
- 在Chrome中看到的我的cookie的过期时间是在我刷新页面之后。
- 如果页面没有刷新,则可以使用cookie访问req.session对象和set变量
- 我正在使用
express
、express-session
、redis
和connect-redis
库。 - 前端处于React状态。
编辑:
Request screenshot
全文:
redisSession=s:YGOMoRx_wWiIiqiYOYaIfcbbKfBujg7w.92wwY6TupTwVjRs4FLbWLxxSi6bm5XW7fDwNfXInW4Q; Path=/; Expires=Sun,07 Mar 2021 16:18:28 GMT; HttpOnly; SameSite=无
1条答案
按热度按时间pdtvr36n1#
当页面刷新时,cookie消失了,但我的状态检查路由实际上再次设置了cookie,但chrome的“锁定”图标cookie计数没有显示它存在。因此,我的客户端在storage/cookies中有cookie,但没有呈现它已登录。我做了一个函数调用来更新我的视觉效果,出于某种原因,cookie出现在“锁定”下拉列表中。