服务器发送的 cookie 没有覆盖现有的 cookie
server sent cookie is not overriding the existing cookie
我有一个 express
应用程序并使用 cookie-session
模块进行会话管理。
应用程序有 2 个路径 https://example.com/abc/def
和 https://example.com/abc/ghi
。如果我首先访问任何路径然后它设置一个 cookie 但如果我将 URL 更改为其他路径然后我可以看到服务器正在响应开发者控制台中的 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
,然后点击 [=13] =] cookie 值将是 {'viewa':'xyz'}
;
在进一步分析中,我发现 cookie 的内容长度超出了允许的 4096 字节大小,一旦我们修复了内容,我们就会看到 cookie 已正确设置。
我有一个 express
应用程序并使用 cookie-session
模块进行会话管理。
应用程序有 2 个路径 https://example.com/abc/def
和 https://example.com/abc/ghi
。如果我首先访问任何路径然后它设置一个 cookie 但如果我将 URL 更改为其他路径然后我可以看到服务器正在响应开发者控制台中的 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
,然后点击 [=13] =] cookie 值将是 {'viewa':'xyz'}
;
在进一步分析中,我发现 cookie 的内容长度超出了允许的 4096 字节大小,一旦我们修复了内容,我们就会看到 cookie 已正确设置。