Wenn ich die Route /test
direkt über den Browser aufrufen, finde ich, dass die Sitzung ordnungsgemäß festgelegt wurde. Aber wenn ich das gleiche von einem Ajax-Anruf mache, finde ich, dass die Sitzung nicht die Informationen hat, die ich zuvor über den anderen Weg /temp
hinzugefügt hatte.Express-Sitzung funktioniert nicht für Ajax Call
Express-Session Config
{
"key": "nsid",
"secret": "some secret password",
"cookie": {
"path": "/",
"httpOnly": false,
"maxAge": null,
"secure": false
},
"resave": true,
"saveUninitialized": true,
"proxy": null
}
routes.js
router.get('/temp', (req, res) => {
const useCase = 'card';
req.session = req.session || {};
req.session.trackingInformation = {};
req.session.trackingInformation.useCase = useCase;
req.session.save();
console.log(req.session);
res.render('/temp');
});
router.get('/test', (req, res) => {
console.log(Util.inspect(req.session));
res.send({});
});
Ajax-Aufruf
fetch('/test').then((response) => {
if (response.status >= 400) {
console.log(response.status);
}
return response.json();
}).then((json) => {
console.log(json);
//do something
});
Wenn ich rufe die localhost:8000/temp
und dann die /test
als Abruf Ajax-Aufruf rufen:
{
"cookie": {
"path": "/",
"_expires": null,
"originalMaxAge": null,
"httpOnly": false,
"secure": false
},
"_csrfSecret": "secret",
"_shared": {
"deviceInfo": {
...
}
}
}
Die Eigenschaft tracking eindeutig nicht gesetzt ist. Aber wenn ich das gleiche direkt von meinem Browser localhost:8000/test
nach dem ersten Aufruf locahost:8000/temp
aufrufen, habe ich die TrackingInformation in der Sitzung festgelegt.
{
"cookie": {
...
},
"_csrfSecret": "secret",
"_shared": {
"deviceInfo": {
...
}
},
"trackingInformation": {
"useCase": "card"
}
}
Über eine Stunde verschwendet, danke! Sieht so aus, als wäre es in den Dokumenten, nur ist nicht sehr hervorgehoben (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) 'Standardmäßig wird fetch nicht senden oder Empfangen von Cookies vom Server, was zu nicht authentifizierten Anfragen führt, wenn die Site auf die Pflege einer Benutzersitzung angewiesen ist (zum Senden von Cookies muss der Kopf der Anmeldeinformationen gesendet werden). " –