服务器发送的cookie不会覆盖现有的cookie

时间:2019-01-04 05:52:28

标签: node.js express cookies cookie-session

我有一个express应用程序,并使用cookie-session模块进行会话管理。 应用程序具有2条路径https://example.com/abc/defhttps://example.com/abc/ghi。如果我先访问任何路径,那么它将设置一个cookie,但是如果我将URL更改为其他路径,那么我可以看到服务器在开发人员控制台中使用cookie的新值进行响应,但它在浏览器中未得到更新。 知道什么阻止了cookie的更新吗?

2 个答案:

答案 0 :(得分:0)

设置新的Cookie之前,您需要先清除cookie。最重要的是,Cookie使用域而不是路径。因此,在要设置cookie的路径中,您都必须检查现有的cookie,如果找到了它,则必须将其删除以设置新的cookie。

const cookieSession = require('cookie-session');
const express = require('express');
const app = express();

app.set('trust proxy', 1) // trust first proxy

app.use(cookieSession({
   name: 'session',
   keys: ['key1', 'key2']
}));

app.get('/abc', function(req, res, next) {
  req.session = {
     'views':'abc'
  };
  res.end(req.session.views + ' cookie value is set');
 });


app.get('/xyz', function(req, res, next) {
  req.session = {
    'views':'xyz'
  };
  res.end(req.session.views + ' cookie value is set');
});

app.get('/test', function(req, res, next) {
   res.end(req.session.views + ' cookie found');
});

app.listen(3000);

这是示例代码,其中路径/abc/xyz设置了会话的不同值,并且这些值可以在/test路径上看到。

因此,如果您首先点击/abc路径,而不是/test路径,则您将获得Cookie值{'views': 'abc'};如果您点击/xyz而不是/test Cookie值为{'viewa':'xyz'};

答案 1 :(得分:0)

在进一步分析中,我发现cookie的内容长度超出了允许的4096字节大小,一旦我们修复了内容,我们就看到cookie正确设置了。