一、Cookie
1、Secure 和HttpOnly 标记
Secure:标记为Secure的Cookie,只应通过被HTTPS协议加密过的请求发送给服务端HttpOnly:标记为HttpOnly的Cookie,JavaScript无法访问带有HttpOnly标记的Cookie,它们只应该发送给服务端,避免跨域脚本XSS
2、SameSite Cookies
SameSite Cookie允许服务器要求某个cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击CSRF。但目前SameSite Cookie还处于实验阶段,并不是所有浏览器都支持。
3、跟localStorage、sessionStorage 相比
| 特性 | Cookie | localStorage | sessionStorage |
|---|---|---|---|
| 生命期 | 可设置失效时间,默认为session cookie;session cookie无法保证会话结束后,一定会被删除 |
除非被清除,否则永久保存 | 仅在当前会话下有效,关闭会话(标签页)后被清除;如果标签页由其他页面打开,当前的sessionStorage会根据前一个页面的sessionStorage数据进行初始化 |
| 大小 | 4K左右 | 一般为5MB | 一般为5MB |
| 通信 | 每次都会携带在HTTP头中 | 仅在客户端中保存,不参与和服务器的通信 | 仅在客户端中保存,不参与和服务器的通信 |
| 作用域 | 通过domain、path来确定 |
通过协议、主机名、端口来确定 |
通过协议、主机名、端口、标签来确定。不同标签页面,sessionStorage数据无法共享 |
注:cookie通过【name,doamin,path】来确定其唯一性,倘若三个属性都一样方为同一个cookie
4、读写cookie
1 | // 读取所有可从此位置访问的Cookie |
注:以下可选的cookie属性值可以跟在键值对后,用来具体化对cookie的设定/更新,使用分号以作分隔。在浏览器控制台中,document.cookie值,对应当前资源的可见cookie值。
;path=path如果没有定义,默认为当前文档位置的路径;domain=domain如果没有定义,默认为当前文档位置的路径的域名部分;max-age=max-age-in-seconds;expires=date-in-GMTString-format如果没有定义,cookie会在对话结束时过期;secure只通过https协议传输
5、cookie匹配规则
浏览器在加载静态资源或者发出ajax请求时,会根据url中的域名与路径,对每个cookie的domain属性和path属性进行验证,存在多个同名cookie时,按一定排序都带上。
请求http://news.example.com/news/hot时, 带上的cookie要满足:
domain属性是news.example.com,及其上级域名path属性是/news/hot,及其上级路径
6、cookie排序原则
- 具有更长path的cookie更靠前
- 如果path长度相等,更早创建的cookie更靠前
二、Referer
Referer 表示请求页面是通过此来源页面里的链接进入的,在以下两种情况下,Referer 不会被发送:
- 来源页面采用的协议为表示本地文件的 “file” 或者 “data” URI
- 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS)
注:
- 在浏览器中,
Referer属性只读不写。但可以通过代理服务进行修改 - 如果需要通过 document.referrer 采集页面访问来源,最好不要使用 JS 跳转或打开新窗口,也不要使用 meta 跳转