express-session - req.session 不显示保存的会话
express-session - req.session not showing saved 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 前端,Node/Express 使用 express-session 和 redis-connect。当我查看我的 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 中间件和获取 api 时很常见。在所有的获取调用中,您需要发送一个设置为 'include' 的凭据 属性,并且在您的 cors 中间件中,您需要将一个选项设置为凭据:true。做一个或另一个不够好,你必须做两个...
fetch('url', {
credentials: 'include'
})
const corsOptions = {
credentials: true
}
在用户登录后存储 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 前端,Node/Express 使用 express-session 和 redis-connect。当我查看我的 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 中间件和获取 api 时很常见。在所有的获取调用中,您需要发送一个设置为 'include' 的凭据 属性,并且在您的 cors 中间件中,您需要将一个选项设置为凭据:true。做一个或另一个不够好,你必须做两个...
fetch('url', {
credentials: 'include'
})
const corsOptions = {
credentials: true
}