security expires HTTP Cookie端口是特定的吗?




set-cookie无效 (7)

我有两台HTTP服务在一台机器上运行。 我只想知道他们是否共享他们的cookies或浏览器是否区分两个服务器套接字。


解决问题的另一种方法是使会话cookie的名称与端口相关。 例如:

  • 运行在端口8080上的服务器的mysession8080
  • 在端口8000上运行的服务器使用mysession8000

您的代码可以访问Web服务器配置,找出您的服务器使用哪个端口,并相应地命名该Cookie。

请记住,您的应用程序将收到这两个cookie,并且您需要请求与您的端口相对应的cookie。

没有必要在cookie名称中包含确切的端口号,但这样更方便。

通常,cookie名称可以编码特定于您使用的服务器实例的任何其他参数,因此它可以通过正确的上下文进行解码。


这是Cookie SOP(同源策略)中的一个大灰色区域。

理论上,您可以指定域中的端口号,并且Cookie不会被共享。 实际上,这不适用于多个浏览器,您将遇到其他问题。 所以这只有在您的网站不适合普通公众且您可以控制使用哪些浏览器时才可行。

更好的方法是为同一个IP获取2个域名,而不是依靠端口号来访问cookie。


在同一台机器上运行(并试图调试)两个不同的Django应用程序时,我遇到了类似的问题。

我用这些命令运行它们:

./manage.py runserver 8000
./manage.py runserver 8001

当我在第一个登录,然后在第二个登录时,我总是注销第一个,反之亦然。

我在/ etc / hosts上添加了这个

127.0.0.1    app1
127.0.0.1    app2

然后我用这些命令启动了两个应用程序:

./manage.py runserver app1:8000
./manage.py runserver app2:8001

问题解决了 :)


在IE 8中,Cookie(仅针对本地主机验证)在端口之间共享。 在FF 10中,他们不是。

我发布了这个答案,以便读者至少有一个测试每个场景的具体选项。


这是可选的。

端口可以​​被指定,以便cookie可以是端口特定的。 没有必要,Web服务器/应用程序必须关心这一点。

资料来源: 德国维基百科文章 RFC2109 ,第4.3.1章


根据RFC2965 3.3.1(可能不会被浏览器跟踪),除非通过Set-Cookie头的port参数明确指定端口,否则cookie可能会或可能不会被发送到任何端口。

Google的浏览器安全手册说: 默认情况下,cookie作用域限于当前主机名上的所有URL--并且不绑定到端口或协议信息。 以及稍后的一些行有没有办法限制饼干只有一个DNS名称[...]同样,没有办法限制他们到一个特定的端口。 (另外,请记住,IE不会将端口号码归入其同源策略。)

所以在这里依赖任何明确定义的行为似乎并不安全。


这是一个非常古老的问题,但我想我会添加一个我使用的解决方法。

我有两种服务在我的笔记本上运行(一个在端口3000上,另一个在4000上)。 当我在( http://localhost:3000http://localhost:4000 )之间跳转时,Chrome会传入相同的cookie,每个服务都无法理解cookie并生成新的cookie。

我发现如果我访问http://localhost:3000http://127.0.0.1:4000 ,问题就消失了,因为Chrome为本地主机保留了一个cookie,一个用于127.0.0.1。

再次,没有人可能在这一点上关心,但对我的情况很容易和有帮助。







cookies