【问题标题】:Handling 2 sid in express session在快速会话中处理 2 sid
【发布时间】:2016-11-23 11:47:22
【问题描述】:

我在下面有一个场景

  1. 在浏览器上,我打开一个网站,在通过系统验证后(即 access.abc.com)我得到一个 cookie,并将其设置在客户端上,即域为 .abc.com 的 connect.sid

  2. 在同一个浏览器上,我打开另一个网站,即 xyz.abc.com,它也生成会话 cookie(在从同一个即 access.abc.com 获得身份验证后),名称相同,但域与 xyz.abc 不同。 com(基本上这个网站就是这样设置的)

现在,如果我向 xyz.abc.com 上的任何 api 发送请求,我会看到 2 connect.sid 正在运行。

我的问题是当 xyz.abc.com 发送请求时 access.abc.com 的 express-session 会选择哪个 cookie?

以下是 access.abc.com 上的快速会话设置

var RedisStore = require('connect-redis')(expressSession);
var session = expressSession({
  key: 'connect.sid',
  store: new RedisStore({host: config.session_redis.host, 
    port: config.session_redis.port,
    ttl: 2*24*60*60 //in secs
  }),
  resave: false,
  saveUninitialized: false,
  secret: '234567',
  cookie: {
    domain: '.abc.com',
    maxAge: 2*24*60*60*1000 // in ms
  }
});

【问题讨论】:

    标签: node.js express express-session


    【解决方案1】:

    我的问题是当 xyz.abc.com 发送请求时 access.abc.com 的 express-session 会选择哪个 cookie?

    查看代码,我认为它会选择它在请求标头中遇到的第一个Cookie 标头中的那个,所以问题变成了“浏览器会首先将哪个cookie放入标头中?” (我无法回答,因为我不知道)。

    【讨论】:

    • 感谢 robertklep 的回复,所以假设如果浏览器在标头中设置了以 xyz.abc.com 作为域的 cookie,并且这就是 access.paytm.com 接收的内容,它将被处理为域不同,即xyz.paytm.com 而不是 .paytm.com?
    • 域没有区别(都是paytm.com),只是主机名。如果您为域设置了 cookie,它将为该域中的所有主机名发送,无论哪个主机实际设置了 cookie(因此,access.paytm.comxyz.paytm.com 的 cookie 将被发送)。
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 2012-12-11
    • 2021-09-23
    • 2017-01-07
    • 2021-05-19
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多