【发布时间】:2020-06-08 02:59:30
【问题描述】:
我正在尝试制作第三方应用程序,这意味着它将跨多个域运行。 我想为每个使用该应用程序的用户处理一个会话,因此,我使用 express-session 模块来创建它,但每次我发出请求时,它都会为当前请求启动一个新会话......
const express = require('express'),
router = express.Router();
const session = require('express-session')
router.use(function(req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
next();
});
router.use(session({
secret: 'keyboard cat',
resave: true,
maxAge: 2 * 60 * 60 * 1000, // 2 hours
saveUninitialized: false,
cookie: {
maxAge: 2 * 60 * 60 * 1000 ,
secure: false,
sameSite : false,
httpOnly: false}
}))
router.get( '/',function (req, res, next) {
// let payload = req.query;
let isDevClient = req.session.isDevClient || false;
console.log('isNew? ', isDevClient );
res.status(201).send({
success: true,
isDevClient,
message: 'msg..'
});
}).post( '/',function (req, res, next) {
let payload = req.body;
console.log('isNew? ', req.session.isDevClient )
req.session.isDevClient = true;
res.status(200).send({
success: true,
message: 'ok'
});
});
module.exports = router;
请求示例
// javascript
fetch('https://127.0.0.1:8443/',{
method : "POST",
credentials: 'include',
})
//Jquery
$.ajax({
'type': 'post',
'url': 'https://127.0.0.1:8443',
'xhrFields': {
'withCredential's: true
}
'success': function (response) {},
})
``
【问题讨论】:
-
你确定 saveUninitialized 应该是假的吗?我认为这是问题所在,因为您的会话没有保存
-
在和现在一样之前我已经试着让它成为现实......
-
您是如何提出请求的?提供minimal reproducible example。您是否在响应中看到
Set-Cookie标头?浏览器是否会在下一个请求中发送 cookie?查看浏览器开发者工具中的网络标签。 -
我通过简单的 ajax 或 fetch 发出请求。我在 chrome 开发工具中的网络上看到
response header中的Set-Cookie标头 -
嘿,伙计,你有没有想过这个问题?我遇到了同样的问题。
标签: javascript node.js express express-session