响应中未设置快速 cookie,未显示在下一个请求中



有几个活动部件,所以很难知道这里要调试什么。

我在一个本地主机端口上有一个 Web 应用程序,在另一个本地主机上运行一个具有几个端点的快速 NodeJS 应用程序,这是一个简单的助手。

我看到的基本问题是我在快速应用程序上的 cookie 会话对于后续调用是空的,我什至没有看到它在第一个响应中被发回。

设置的

客户端对快速应用程序进行基本的 GET ajax 调用(目前为 jQuery)。

我为会话 cookie 设置了http限额:

app.use(cookieSession({
name: 'session',
keys: ['abcdefg'],
maxAge: 24 * 60 * 60 * 1000, // 24 hours,
secure: false
}))

我在快速应用程序上设置了跨源请求:

app.use((req, res, next) => {
const corsWhitelist = [
'http://localhost:8000',
'http://localhost:8777'
];
if (corsWhitelist.indexOf(req.headers.origin) !== -1) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
}
next();
});

请求似乎没有问题地完成,因为响应机构是我所期望的。

请求处理程序的实质是:

app.get('/initialize', (req, res) => {
console.log(req.session);
//if we have a session with verified status 
if (req.session.hasOwnProperty("userId") && req.session.userId){
res.send({result: 'OK', message: 'good - 1'});
return;
}
const id = uuid.v4();
req.session.userId = id;
res.send({result: 'OK', message: 'good - 2'});
return;
});

我总是从 ajax 调用中得到第二个响应"好 - 2"。日志始终将会话显示为{}

可能值得注意的是,Chrome devtools 为请求标头显示"显示临时标头",而响应标头中未显示set-cookie。AJAX 是一个简单的 GET 到一个终结点,其中包含一个传入的参数。

更新

刚才我想到尝试不使用 AJAX 调用。直接点击 URL 会获取 cookie 并保持会话按预期进行。这可能会改变问题的动态。

解决方法是使用 jsonp 请求/响应来获取 cookie 以传递 ajax 调用。真的与快递无关。

https://samueleresca.net/2015/07/json-and-jsonp-requests-using-expressjs/

最新更新