如何在生产中设置快速会话。快速会话在 https 中不起作用
Posted
技术标签:
【中文标题】如何在生产中设置快速会话。快速会话在 https 中不起作用【英文标题】:How to set up express-session in production. Express-session is not working in https 【发布时间】:2020-04-28 20:34:37 【问题描述】:我使用 express-session 和 connect-mongo 来存储会话,它在开发环境中运行良好。但是,它不是在生产中持久化会话。当我登录时,我可以通过console.log(req.sesssion)
在服务器上获取会话。但是,如果我移动到另一个 url,会话是未定义的。
const whitelist = ['https://example.com', 'https://www.example.com'];
const corsOptions =
origin(origin, callback)
if (whitelist.indexOf(origin) !== -1)
callback(null, true);
else
callback(new Error('Not allowed by CORS'));
;
app.use(cors(corsOptions));
app.use(session(
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
store,
));
【问题讨论】:
【参考方案1】:在寻找答案后,我花了大约一天的时间。最后,我发现了引起所有头痛的问题。该问题与http请求有关。我在请求中使用axios
,默认情况下,Axios 不会获取发送或接收任何 cookie。为了能够使用 cookie,我需要为我发出的每个请求传递 Axios 配置选项。withCredentials: true
。感谢post author。
Axios.post(url, data, withCredentials: true )...
但是,这让我想到了另一个问题。
""Access-Control-Allow-Credentials" 标头的值 响应为 '' ,当请求的凭据时必须为 'true' 模式是“包含”。”
然后我将 credentials: true
添加到我的 cors() 模块 like so。
const corsOptions =
origin(origin, callback)
if (whitelist.indexOf(origin) !== -1)
callback(null, true);
else
callback(new Error('Not allowed by CORS'));
,
credentials: true
;
现在我的项目已经上线并为用户提供服务,让他们的生活更轻松:)。
【讨论】:
以上是关于如何在生产中设置快速会话。快速会话在 https 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS、VueJS、快速会话。 cookie 不在客户端设置