【问题标题】:server sent cookie is not overriding the existing cookie服务器发送的 cookie 没有覆盖现有的 cookie
【发布时间】:2019-05-30 17:10:52
【问题描述】:

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

【问题讨论】:

    标签: node.js express cookies cookie-session


    【解决方案1】:

    您需要先清除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,域是相同的。您能否提供一些参考,我如何清除 cookie 并在相同的请求/响应中创建新的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 2021-04-28
      • 2015-07-03
      • 2019-07-07
      • 2020-02-23
      • 2022-10-24
      • 2016-10-15
      • 2016-07-01
      • 2015-06-30
      相关资源
      最近更新 更多