Cookie路径及其对子文件夹页面的可访问性

100
假设我有一个域名为www.example.com的网站。
如果我设置了一个路径为'***/***'的cookie,那么这个cookie将可以在该域名下的所有页面中访问,例如:
  • www.example.com/page1.html
  • www.example.com/subfolder1/page1.html
  • www.example.com/subfolder1/moresubfolder1/page1.html等。
如果我们将cookie的路径设置为'/subfolder1',那么这个cookie是否会在该文件夹下的任何页面或子文件夹中可用呢?例如:
  • www.example.com/subfolder1/moresubfolder/page1.html
所以,如果不是的话,我猜我别无选择,只能使用路径'/'来设置这些cookie,对吗?
4个回答

97
如果我们将cookie设置为路径'/subfolder1',那么该cookie是否会在该文件夹下的任何页面或子文件夹中可用?
是的。该cookie将在/subfolder1路径下的所有页面和子目录中可用。

42
请参考https://dev59.com/V2sz5IYBdhLWcg3wR1kc中的相关规范。对于那些不知道的人来说,cookie只能被指定路径及其子路径访问,而不能被其超级路径访问。因此,路径“/folder/subfolder1/”的cookie无法被“/folder/”访问。我为此烦恼了一段时间。 - Anson Kao
@SampleJACK 哎呀,那解释了我的问题! - RonLugge
@Alex,那么我们如何获取一个针对于/subfolder1不是/subfolder1/inner-folder的cookie呢? - Pacerier
@Pacerier,我们正在评论的答案是正确的,你还有其他问题吗? - Anson Kao
@SampleJACK 我们如何获取一个针对/subfolder1而不是/subfolder1/inner-folder的cookie? - Pacerier
据我所知,这是不可能的。Cookie适用于所有较低的路径(除非您为较低的路径设置了不同的cookie,例如在我们的情况下在/subfolder1/inner-folder中)。 - thepeer

17
为了消除一些歧义,可以重用此回答的部分内容:

如果至少满足以下情况之一,则请求路径路径匹配给定的cookie路径:

  • cookie路径和请求路径完全相同。
  • cookie路径是请求路径的前缀,并且cookie路径的最后一个字符为%x2F(“/”)。
  • cookie路径是请求路径的前缀,并且未包含在cookie路径中的请求路径的第一个字符是%x2F(“/”)字符。

/subfolder1路径和/subfolder1/路径上设置Cookie之间存在微小但可能很重要的差异。

如果您依赖前者,则需要在请求路径前加上“%x2F(“/”字符)”才能保证所需的行为。例如,请参见链接的答案。

将Cookie路径设置为简单的/可避免任何边缘情况,但正如您所说- Cookie将可以访问整个域。


1
最具信息量的答案 - CybeX
/subfolder1/subfolder1/有什么区别?根据链接的答案,唯一的区别是:请求路径/subfolder1KKK也匹配cookie路径/subfolder1,对吗?不同的浏览器可能会有不同的行为,例如IE将请求路径/subfolder1KKK与cookie路径/subfolder1匹配,但Firefox则不会,对吗? - frank
根据引用的RFC,/subfolder1/subfolder1/之间没有区别。唯一的区别是如果浏览器不遵守此规则(即IE)。只有cookie路径/subfolder1/可以匹配第2点;请求路径/subfolder1ABC将无法匹配cookie路径/subfolder1,因为第一个不匹配的字符是A而不是/,所以它不符合第3点。 - Roger Dueck

13
如果我们将cookie设置为路径/subfolder1,那么示例中的以下页面是可以访问的:

www.example.com/subfolder1/page1.html
www.example.com/subfolder1/moresubfolder1/page1.html
等等。

但是,页面www.example.com/page1.html将无法访问,因为它不属于允许的路径。

2
例如,下面有7个URL可以访问具有全局路径/的cookie:
https://example.com/
https://example.com/a/
https://example.com/a/a-1/
https://example.com/a/a-2/
https://example.com/b/
https://example.com/b/b-1/
https://example.com/b/b-2/

然后,具有路径/b的cookie可以通过以下3个URL进行访问:
https://example.com/b/
https://example.com/b/b-1/
https://example.com/b/b-2/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接