node.js - express-session - req.session 不显示保存的会话
问题描述
用户登录后存储 userId 后,我无法查看 req.session 保存的数据。
当我从登录功能 console.log 会话时,我得到了正确的数据......
Session {
cookie:
{ path: '/',
_expires: 2019-02-23T12:17:24.134Z,
originalMaxAge: 7200000,
httpOnly: true,
sameSite: true,
secure: false },
userId: 4 }
但是当我从其他路由 console.log(req.session) 之后我得到一个新的空白会话
Session {
cookie:
{ path: '/',
_expires: 2019-02-23T12:12:47.282Z,
originalMaxAge: 7200000,
httpOnly: true,
sameSite: false,
secure: false } }
我正在使用端口 3000 上的 React 前端和带有 express-session 和 redis-connect 的 Node/Express 在我的本地主机上工作。当我查看我的 Redis 时,我正确地看到了存储的会话。
这是我的会话代码...
app.use(
session({
store,
name: 'sid',
saveUninitialized: false,
resave: false,
secret: 'secret',
cookie: {
maxAge: 1000 * 60 * 60 * 2,
sameSite: true,
secure: false
}
})
)
我已经为这些选项尝试了所有不同的值,但没有任何效果。请帮忙!
解决方案
答案来自 RobertB4 https://github.com/expressjs/session/issues/374的各种答案
显然这个问题在使用 CORS 中间件和 fetch api 时很常见。在所有 fetch 调用中,您需要发送设置为“include”的凭据属性,并且在您的 cors 中间件中,您需要将选项设置为凭据:true。做一个或另一个是不够的,你必须同时做...
fetch('url', {
credentials: 'include'
})
const corsOptions = {
credentials: true
}
推荐阅读
- javascript - 使用 forEach 比较先前的值
- vbscript - 从 Asp 经典页面访问 .NET TimezoneInfo 的最简单方法
- webpack - Webpack URLLoader 限制要小
- python - 如果 __init__ 包含 Clock.schedule_interval,Kivy 崩溃
- bash - Shell 脚本数组未打印正确的值
- python - 在字典中查找最高值
- r - 类似于 Excel 的线条的 ggplot “发光”效果
- java - 如何诊断堆栈跟踪从未通过我的代码的 NullPointerException?
- c# - 按位或作为自定义属性中的输入参数
- wordpress - 在 Wordpress 网站上获取 Map API 密钥错误