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



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

设置新 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'};

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

最新更新