一、属性介绍
-
Name
Cookie的key
-
Value
Cookie的value
-
Domain
可以访问此Cookie的域名
-
Path
可以访问此Cookie的页面路径
-
Expires/Max-Age
Cookie的生命期,不设置默认值是一次会话,浏览器进程关闭后,此Cookie失效
-
Size
此Cookie大小
-
HTTP
设置HttpOnly为true,则只有在http请求头中会带有此Cookie的信息,不能通过Document.cookie来访问此Cookie信息,防止XSS攻击
-
Secure
是否只能通过HTTPS协议来与WEB服务器之间传递此条Cookie数据
-
SameSite
用于定义Cookie如何跨域发送,用于阻止CSRF攻击,有两个属性Strict和Lax
详细介绍
二、跨域问题
1.Domain和Path的默认值
Domain默认html文件所在的域名,Path默认为html文件所在的路径
2.Domain设置规则
- 设置—js设置domain要符合域名的规则,可设置成 baidu.com,但是不能设置成baidu。不可以把cookie设置成不同于html域名的domian。会设置不成功。但不会影响后面程序对cookie的操作。如果domain设置错误,该cookie将不会被创建,并且后续对cookie的操作都会被浏览器禁止。js手动设置cookie的domain都是以.开头的。比如设置成 baidu.com,实际为 .baidu.com,删除cookie时可不加.
- 获取—js只能获取domian大于等于当前页面域名的cookie。如 www.baidu.com/testCookie.html 页面中的js能获取domain为 www.baidu.com 和 .www.baidu.com 和 .baidu.com,获取不到 news.baidu.com 中的cookie
- 删除—domain值必须跟要删除cookie的domain相同
3.Path设置规则
- 设置—js设置path要以”/”开头,如html路径为”/blog/20160623/”,路径可以设置成”/”或”/blog”, 如果path不是以”/”开头,则创建cookie的path会使用默认path;如果是以”/”开头,但是设置错误,路径名不存在或者直接设置成子路径。比如设置成”/20160623”,该cookie不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止
- 获取—js只能获取path大于等于当前页面path的cookie,如html路径为/blog/20160623/,使用js只能获取/blog/20160623/和/blog和/路径下的cookie
- 删除—js删除cookie时路径必须相同
页面能访问那些Cookie和从哪里引入js没有关系,跟Html文件所在的domain和path有关系。Cookie只能跨二级域名来访问,不能跨一级域名来访问。js删除一个cookie,domain和路径必须完全相同。
三、小实例
1.同域情况
name | domain | path |
---|---|---|
a | a.baidu.com | / |
b | a.baidu.com | /tmp |
c | a.baidu.com | /abc |
d | a.baidu.com | /abc/def |
/下的页面只能访问a
/tmp下的页面可以访问a,b
/abc下的页面可以访问a,c
/abc/def下的页面可以访问a,c,d
2.不同域情况
name | domain | path |
---|---|---|
a | a.baidu.com | / |
b | b.baidu.com | /tmp |
c | c.baidu.com | /abc |
d | d.baidu.com | /abc/def |
a,b,c,d不能同时被访问,指定域下的路径中的网页才能访问对应的Cookie
想要同时被访问就需要把domain修改为一级域 baidu.com,之后的规则就是同域情况了