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"}
Другие вопросы по тегам