不光不区分端口号, 还不区分协议。
今天把同样的 两个 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.