Node Express 无法通过 post 请求设置会话

问题描述 投票:0回答:4

我使用node express 4.0实现消息验证码功能。 我使用会话来存储我发送的消息代码。 我按照dos设置session中间件:

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代码时,发现session没有设置成功

喜欢下面的代码:

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
值。

那为什么我的post方法不起作用?

node.js session express express-session
4个回答
3
投票

我有同样的问题。我一直在使用

fetch
进行请求,默认情况下它不发送 cookie,所以我为 GET 和 POST 请求获得了不同的 cookie id。解决方案是:

fetch(url, {
  credentials: 'same-origin' // or 'include'
});

有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials


1
投票

你只需尝试 session.save() ,在 express 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);
});

0
投票

你没有提到你是如何调用 POST 路由的。您是否将会话 cookie 与 POST 请求一起发送?另外,POST 方法返回什么类型的响应?

(在 app.js 中)

var session = require('express-session');
app.use(session({
  secret: 'sooper_secret',
  resave: false,
  saveUninitialized: false
}));

(在 routes/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"}

0
投票

最后我在这个 youtube 上找到了答案: 在 React 和 Express 应用程序中设置 cookie(本地和生产中)

您需要添加代理和凭据

© www.soinside.com 2019 - 2024. All rights reserved.