Node Express не может установить сеанс с пост-запросом
Я использую node express 4.0 для реализации функции проверки кода сообщения. Я использую сессию для хранения отправляемого MSG-кода. Я установил промежуточное программное обеспечение сеанса, как сказал:
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(cookieParser());
app.use(session({secret:'ssssss'}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/uploads', express.static(path.join(__dirname, 'uploads/temp')));
но когда я использую метод post, получаю код msg, я обнаружил, что сеанс не был успешно установлен.
Как этот код ниже:
router.post('/msgCode', function(req, res) {
req.session.test = 'test';
// request send msg code api then response
}
когда я перепостил этот роутер, я обнаружил, что req.session.test
не определено
тогда я пытаюсь это в другом маршрутизаторе:
router.get('/sendMsgTest', function(req, res) {
req.session.test = 'test';
res.json({
status:0
})
}
каждый раз, когда я прошу sendMsgTest
, Я могу получить req.session.test
, И когда я прошу другого get
метод, я могу получить req.session.test
оценить успешно.
Так почему же мой метод записи не работает?
3 ответа
Я была такая же проблема. Я использую fetch
для запросов и он не отправляет куки по умолчанию, поэтому я получил разные идентификаторы куки для запросов GET и POST. Решение было:
fetch(url, {
credentials: 'same-origin' // or 'include'
});
См. https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials для получения дополнительной информации.
Вы просто попробуйте session.save(), и в экспрессе 4 вы должны упомянуть "resave","saveUninitialized"
var session = require('express-session');
app.use(session({secret: 'keyboard cat', resave: false, saveUninitialized: true,cookie: { path: '/', httpOnly: true, maxAge: 30 * 30000 },rolling: true}));
router.post('/savesession', function (req, res) {
req.session.user = 'user';
req.session.save()
res.json(req.session.user);
});
router.get('/getsession', function (req, res) {
res.json(req.session.user);
});
Вы не упоминаете, как вы вызываете маршрут POST. Отправляете ли вы cookie сеанса вместе с запросом POST? Кроме того, какой тип ответа возвращает метод POST?
(в app.js)
var session = require('express-session');
app.use(session({
secret: 'sooper_secret',
resave: false,
saveUninitialized: false
}));
(в маршрутах / index.js)
router.post('/post', function (req, res) {
req.session.test = 'test';
res.json({success: true});
});
router.get('/get', function (req, res) {
const results = {
sessionData: req.session.test || 'session data not found'
};
res.json(results);
});
(командная строка)
% curl -X POST localhost:3000/post --cookie-jar test.cookie
% {"success":true}
% curl localhost:3000/get --cookie test.cookie
% {"sessionData":"test"}