我在一台机器上运行两个HTTP服务。我只是想知道它们是否共享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
问题解决了:)
其他回答
它是可选的。
可以指定端口,因此cookie可以是特定于端口的。这是不必要的,web服务器/应用程序必须关心这个。
来源:德文维基百科文章,RFC2109,第4.3.1章
这是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
问题解决了:)
解决这个问题的另一种方法是使会话cookie的名称与端口相关。例如:
Mysession8080用于运行在端口8080上的服务器 Mysession8000用于运行在端口8000上的服务器
您的代码可以访问webserver配置,以找出您的服务器使用哪个端口,并相应地命名cookie。
请记住,您的应用程序将接收这两个cookie,您需要请求与您的端口对应的那个cookie。
在cookie名称中不需要有确切的端口号,但这样更方便。
通常,cookie名称可以编码特定于您使用的服务器实例的任何其他参数,因此可以通过正确的上下文对其进行解码。
在IE 8中,cookie(仅针对本地主机进行验证)在端口之间共享。在FF 10中,它们不是。
我公布了这个答案,以便读者至少有一个具体的选项来测试每个场景。
推荐文章
- 阻止人们入侵基于php的Flash游戏高分表的最佳方法是什么
- 为什么说“HTTP是无状态协议”?
- 我需要HTTP GET请求的内容类型报头吗?
- 如何唯一地识别访问我网站的计算机?
- 如何让Chrome允许混合内容?
- 正确的方式删除cookies服务器端
- REST DELETE真的是幂等的吗?
- 使用jQuery创建、读取和删除cookie
- 了解Chrome网络日志“停滞”状态
- 用户代理字符串可以有多大?
- 什么是接受* HTTP报头q=0.5 ?
- HTTP状态码200(缓存)和状态码304之间有什么区别?
- Chrome不会删除会话cookie
- HTTP POST返回错误:417“期望失败。”
- 令牌身份验证vs. cookie