在通用应用程序中,我放弃了服务器/服务器http请求中的每个用户cookie。 我已经构建了一个小型nodeJS应用程序来重现这个东西:
const fetch = require('isomorphic-fetch');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const server = require('express')();
server.use(bodyParser());
server.use(cookieParser());
server.use(session({
secret: 'foo',
httpOnly: false
}));
server.get('/set-cookies', (req, res) => {
req.session.user = { name: 'john doe' };
res.send('OK');
});
server.get('/a', (req, res) => {
console.log('COOKIE IN A = ', req.cookies); // Cookies are here !
const options = { credentials: 'include' };
fetch('http://localhost:3131/b', options)
.then( () => {
res.send('OK');
});
});
server.get('/b', (req, res) => {
console.log('COOKIES IN B = ', req.cookies); // Cookies are lost ! How to get it back ?
res.sendStatus(200);
});
server.listen(3131);
1)点击GET / set-cookies 2)点击GET / a(饼干按预期在这里)
问题:当/ a控制器向GET / b发出AJAX请求时,它不会传输cookie,因此路由/ b无法对用户进行身份验证
如何在每次请求时转移用户cookie? 我听说过" cookie jar"但我无法清楚地解释它是什么,我在网上找不到任何干净的解释,如果有人可以分享一些有关的知识,那就太棒了!
答案 0 :(得分:1)
whatwg-fetch
可以选择通过以下方式发送Cookie,但它似乎不起作用。
fetch('http://localhost:3131/b', {
credentials: 'same-origin'
});
您可以通过以下方式手动将Cookie发送到fetch
。
server.get('/a', (req, res) => {
console.log('COOKIE IN A = ', req.cookies); // Cookies are here !
const options = {
'headers' : {
'Cookie': req.headers.cookie
}
};
fetch('http://localhost:3131/b', options)
.then( () => {
res.send('OK');
});
});