在cookie路径上设置斜杠?

时间:2016-03-21 12:26:53

标签: cookies

是否有最佳做法是否在Cookie路径的末尾设置斜杠? 是 path 比...更好 path/ 以任何方式? 我发现两个版本都会产生不同的cookie,但我不知道哪个版本是首选。

3 个答案:

答案 0 :(得分:1)

就服务器端而言,此问题(https://bugzilla.mozilla.org/show_bug.cgi?id=469678)指出:

  

根据RFC 2109,由Set-Cookie设置的cookie的默认路径为:

     

默认为生成Set-Cookie响应的请求URL的路径,最多但不包括最右边的/。

因此,这是一个不应使用斜杠的观点。


RFC历史记录

RFC 2109,1997年2月,HTTP状态管理机制

https://tools.ietf.org/html/rfc2109

  • 请参见 4.3.1解释Set-Cookie
  • 默认为生成Set-Cookie响应的请求URL的路径,最多但不包括最右边的/。

不要包含结尾的“ /”。

RFC 2965,2000年10月,HTTP状态管理机制

已淘汰:2109

https://tools.ietf.org/html/rfc2965

  • 请参见 3.3.1解释Set-Cookie2
  • 默认为生成Set-Cookie2响应的请求URL的路径,直至并包括最右边的/。

DO 包含结尾的“ /”。

RFC 6265,2011年4月,HTTP状态管理机制

已淘汰:2965

https://tools.ietf.org/html/rfc6265#section-5.2.4

  • 请参阅 5.1.4。路径和路径匹配
  • -3。如果uri路径中包含的字符不超过一个%x2F(“ /”),则输出%x2F(“ /”)并跳过其余步骤。
  • -4。从第一个字符到最右边的%x2F(“ /”),但不包括uri-path的字符输出。

不要包含结尾的“ /”。


客户端测试

在客户端上,如果您使用以下代码:

document.cookie="a=1"

通过检查每种浏览器的devtools可以得到这些结果(我的站点有一个window.location.pathname =“ /selenium/tests/testCustomizeColumnsPage.html ”)

Chrome/71.0.3578   /selenium/tests
Firefox/64.0       /selenium/tests/
Edge               /selenium/tests/
IE11               devtools doesn't show cookies, think the path includes the trailing '/'

那么Chrome在这里错了吗?


其他参考文献:

答案 1 :(得分:0)

不,通常你不应该在cookie路径的末尾添加斜杠。唯一的例外是针对根文件夹的cookie,您应该在其中写下:

path=/

对于子文件夹,您通常应该编写(例如):

path=/Content/Web

为什么呢?大多数Web服务器认为这三个请求都指向同一个文件:

GET /Content/Web
GET /Content/Web/
GET /Content/Web/index.html

如果您的Cookie有一个如/Content/Web/的尾部斜杠,那么它将不会被发送到上面的第一个请求。这可能会导致应用程序行为混乱。没有像/Content/Web这样的尾部斜杠的Cookie将涵盖所有三个请求。

答案 2 :(得分:0)

我们刚刚在Iphone上看到了Safari中的一个错误,该错误中设置为无尾斜杠的cookie为空。该错误会影响我面前的三个Iphone之一,即运行IOS 11.3.1的Iphone 7。在devtools中,我们可以看到cookie的名称,但其中的值不存在。同样的问题似乎也触及this user。我们现在在cookie路径上添加斜线!