node.js - Node Express 无法通过发布请求设置 session

标签 node.js session express express-session

我使用node express 4.0实现了消息验证码功能。 我使用 session 来存储我发送的消息代码。 我按照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方法不起作用呢?

最佳答案

我遇到了同样的问题。我一直在使用 fetch 请求,默认情况下它不发送 cookie,所以我为 GET 和 POST 请求获得了不同的 cookie id。解决方案是:

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

参见 https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials了解更多信息。

关于node.js - Node Express 无法通过发布请求设置 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34177490/

相关文章:

javascript - Node websockets/ws - WSS : How to tell if I closed the connection, 或者他们做到了?

javascript - 在 TypeScript 中使用泛型

php - php 在使用 redis 存储 session 时如何处理被破坏的 session ?

mysql - 使用express.js和mysql进行用户身份验证

node.js - 服务器端不进行排序

java - 我可以关闭 web.xml 中的 HttpSession 吗?

php - 如何在wordpress中进行 session 登录

express - NextJS 始终如一地访问每个页面的请求对象

node.js - 如何使用 node 和 express 从搜索表单中查询 mongodb

node.js - 如果 root 的主要版本与依赖项不同,如何删除重复的 npm 包