cookie 不区分端口号!

2021-10-22 12:57:27 +08:00
 selfcreditgiving

不光不区分端口号, 还不区分协议。

前情:

今天把同样的 两个 web 服务( node express 做的,session 用 redis 保存)。

一个部署在 云服务器上(宿主机),一个部署在这个服务器的 docker 容器里。 想要测试一下是不是真的因为在 docker 容器里的原因使性能变差了。

问题产生:

宿主机是 8080 端口, 容器的是 50080 端口, 当我访问了其中一个( A 服务器)的时候, 再去访问另一个( B 服务器)的时候,这个一定会跳回登录页面(说明没有登录)。 然后登录了 b 服务器, 又去访问 A 服务器,A 服务器又会被踢下来要登录。

当时我还以为是 docker 隔离是不是不完全啊, 怎么两个完全不搭架的 两个服务器,会互相影响呢?

结论:

所以 cookie 不区分端口号 , 不管端口号 是 8080 还是 50080,cookie 都会发过去。 A 服务器的 redis 里只保留了 A 服务器的 session,访问 B 服务器 的时候,!!因为不区分端口号,A 服务器的 cookie 也会完全一样的发到 B 服务器 !! B 服务器在自己的 redis 上找不到这个 session,所以认为这个用户没有登录,把用户踢了下来。

后来查到 cookie 连协议也是不分的, 不管是 http 还是 https 都是当作同一个服务器,都会把 cookie 发送过去。

大家感兴趣的话可以看看这个回答: https://stackoverflow.com/questions/1612177/are-http-cookies-port-specific

1959 次点击
所在节点    分享发现
7 条回复
selfcreditgiving
2021-10-22 13:11:10 +08:00
发现把 同样一个服务器, 域名换成 公网 ip 地址访问, 是不会发相同 cookie 的。

例如: http://www.example.com:8080 和 http://1.2.3.4:50080 都是同一个服务器,只是把域名换成了 IP 地址。
killerv
2021-10-22 13:30:27 +08:00
Cookie 是同站策略,只要 eTLD+1 相同即可。
selfcreditgiving
2021-10-22 14:08:44 +08:00
@killerv 赞,学习了
deplivesb
2021-10-22 14:15:22 +08:00
cookie 同站 都不知道?
再打打基础
2i2Re2PLMaDnghL
2021-10-22 14:59:22 +08:00
set-cookies 我记得可以要求强制 https 来着
wwbfred
2021-10-22 22:48:11 +08:00
我怎么记得 http 和 https 不通用的,之前两个协议还都在使用的时候要登录两遍……
SmiteChow
2021-10-25 14:10:23 +08:00
是的,这也是远古各大门户为什么有那么多新闻、论坛、邮箱等等服务也只需要登录一次就可以,根本不需要什么 sso 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/809778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX