Cookie
Cookie是什么?
Cookie是服务器保存在浏览器的一小段文本,一般大小不超过4KB,浏览器每次向服务器发送请求就会自动附带上这段信息。
Cookie的作用?
Cookie 主要保存状态信息,如:
对话管理:保存登录、购物车等需要记录的信息。
个性化信息:保存用户的偏好,比如网页的字体大小、背景色等等
追踪用户:记录和分析用户行为。
Cookie 不是一种理想的客户端储存机制。它的容量很小(4KB),缺乏数据操作接口,而且会影响性能。只有那些每次请求都需要让服务器知道的信息,才应该放在 Cookie 里面。
Cookie里面的数据有哪些?
1 Cookie的名字
2 Cookie的值(真正的数据写在这里面)
3 到期时间(超过这个时间会失效)
4 所属域名(默认为当前域名)
5 生效的路径(默认为当前网址)
用户可以设置浏览器不接受 Cookie,也可以设置不向服务器发送 Cookie。window.navigator.cookieEnabled
属性返回一个布尔值,表示浏览器是否打开 Cookie 功能。
document.cookie
属性返回当前网页的 Cookie。
不同浏览器对 Cookie 数量和大小的限制,是不一样的。一般来说,单个域名设置的 Cookie 不应超过30个,每个 Cookie 的大小不能超过4KB。超过限制以后,Cookie 将被忽略,不会被设置。
Cookie的生成
Cookie 由 HTTP 协议生成,也主要是供 HTTP 协议使用。服务器如果希望在浏览器保存 Cookie,就要在 HTTP 回应的头信息里面,放置一个Set-Cookie
字段。
如果服务器想改变一个早先设置的 Cookie,必须同时满足四个条件:Cookie 的key
、domain
、path
和secure
都匹配。
Cookie的发送
浏览器向服务器发送 HTTP 请求时,每个请求都会带上相应的 Cookie。也就是说,把服务器早前保存在浏览器的这段信息,再发回服务器。这时要使用 HTTP 头信息的Cookie
字段。
Cookie的属性
1 Expires属性:指定一个具体的到期时间(如果不设置该属性,或者设为null
,Cookie 只在当前会话(session)有效,浏览器窗口一旦关闭,当前 Session 结束,该 Cookie 就会被删除)
2 Max-Age属性:指定从现在开始 Cookie 存在的秒数
如果同时指定了Expires和Max-Age,那么Max-Age的值将优先生效。
如果Set-Cookie字段没有指定Expires或Max-Age属性,那么这个 Cookie 就是 Session Cookie,即它只在本次对话存在,一旦用户关闭浏览器,浏览器就不会再保留这个 Cookie。
3 Domain属性指定浏览器发出 HTTP 请求时,哪些域名要附带这个 Cookie
4 Path属性指定浏览器发出 HTTP 请求时,哪些路径要附带这个 Cookie。
5 Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite
属性,用来防止 CSRF 攻击和用户追踪。
Cookie 的SameSite
属性用来限制第三方 Cookie,从而减少安全风险。它可以设置三个值。
Strict , Lax None
Strict
Strict
最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。
Lax , None 自行查阅