Cookie可见性范围详解
换个角度来理解Cookie吧
-
先看看Cookie在浏览器中长啥样
-
很像数据库的一张表对吧?
-
所以,Cookie从数据库表来理解的话,Cookie就是一张表,这张表中有一行一行的记录。从Java类和对象的关系来理解的话,Cookie就是一个类,而每一条记录就是一个Cookie对象。
Cookie可见性概念解释
当发送一次http请求,上述表格中的哪条记录或那些记录会被携带上
Cookie可见性的关键:Domain,Path
-
domain
属性指定了 cookie 所属的域。如果设置了这个属性,那么这个 cookie 将被发送到指定域及其所有子域。如果没有明确设置,则默认为创建该 cookie 的主机名(不包括子域名)。- 示例 1:假设你有一个网站
example.com
,并设置了一个 cookie,其domain
属性是.example.com
。这样,这个 cookie 不仅会被example.com
接收到,也会被sub.example.com
、another.sub.example.com
等等接收到。 - 示例 2:如果你只设置了
domain=example.com
而不是以点开头的.example.com
,那么这个 cookie 只会被example.com
使用,而不会被任何子域访问到。
- 示例 1:假设你有一个网站
-
path
属性定义了 URL 路径下哪些部分可以访问 cookie。只有当请求的路径与path
匹配时,cookie 才会被包含在请求中。匹配规则是从左到右的目录级匹配,即/foo
会匹配/foobaz
,但/foobaz
不会匹配/foo
。- 示例 1:假设你在
example.com
上设置了path=/
的 cookie,这意味着整个网站上的每个页面都可以访问这个 cookie。 - 示例 2:如果你设置了一个
path=/account
的 cookie,那么只有当用户访问example.com/account
或者更深层次的路径如example.com/account/settings
时,这个 cookie 才会被发送给服务器。访问example.com/about
则不会带上这个 cookie。
- 示例 1:假设你在
-
重点:
- 这两者共同决定Cookie记录是否会被http请求所携带!!!
- 一个 cookie 设置了
domain=.example.com; path=/secure
。这种情况下,所有属于example.com
及其子域,并且 URL 路径以/secure
开头的页面都会发送这个 cookie。例如sub.example.com/secure/login
会发送这个 cookie,但是sub.example.com/about
不会。