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