cookie

cookie:HTTP最初是一个匿名、无状态的协议,Web 服务器几乎没有什么信息可以用来判定是哪个用户发送的请求,cookie 就是一些数据,用来存储会话信息,识别用户, 实现持久会话。

一、cookie的字段

字段有:[name] [value] [domain] [path] [expires/max-age] [size] [http] [secure] [sameSite]

name:存储在cookie中变量的名称。

value:存储在cookie中变量的值。

domain:域,cookie 对于哪个域是有效的。所有向该域发送的请求中都会包含这个 cookie 信息。

path:对于指定域中的那个路径,可以访问cookie;应该向服务器发送 cookie。如果同域不同路径,就不能访问该cookie。

expires:表示 cookie 何时应该被删除的时间戳。这个值是个 GMT 格式的日期,用于指定应该删除cookie 的准确时间。expires属性设置可能会出现误差,因为服务器时间与客户端时间可能不同。

max-age:默认单位是秒,用于规定n秒后Cookie过期。max-age的优先级比expires高,如果同时设置expires与max-age属性,那么max-age属性会生效。

size:此cookie的大小。

http:仅在HTTP层面上传输的cookie,设置了httpOnly后,客户端无法读写该cookie,能有效防御XSS攻击获取cookie。

secure:设置了secure标志的cookie仅在HTTPS层面上安全传输,如果请求的是HTTP,则不会发送这个cookie。设置了secure标志的cookie 客户端脚本是可以读写该cookie的。

sameSite:SameSite是Cookie最新增加属性,用于限制第三方Cookie,防止 CSRF 攻击和用户追踪。属性值有Strict,禁用任何第三方请求Cookie;Lax,对于第三方异步请求,则禁止第三方Cookie,对于第三方同步且是GET请求,则不禁止第三方Cookie;None,对于第三方请求的Cookie不做任何限制。

注意:域、路径、失效时间和 secure 标志都是服务器给浏览器的指示,以指定何时应该发送 cookie。这些参数并不会作为发送到服务器的 cookie 信息的一部分,只有 name 和 value 才会被发送。
 

二、cookie的类型

cookie分为 会话cookie 持久化cookie

会话cookie(内存cookie):临时cookie,没设置过期时间,当用户退出浏览器cookie从内存中销毁。

持久化cookie:设置了过期时间,cookie存储在硬盘中,直到过期。

 

三、cookie的限制

1、数量限制

每个域的 cookie 总数是有限的,而且不同的浏览器之间限制数不同。大多数浏览器每个域能有50个cookie,当超过单个域名限制之后还要再设置 cookie,浏览器就会清除以前设置的 cookie。

2、尺寸限制

浏览器中对于 cookie 的尺寸也有限制。大多数浏览器都有大约 4096B(加减 1)的长度限制。如果尝试创建超过最大尺寸限制的 cookie,那么该 cookie 会被丢掉。

由于cookie会随着每次HTTP请求头信息一起发送,所以在 cookie 中存储大量信息会影响到特定域的请求性能,cookie 信息越大,完成对服务器请求的时间也就越长。

 

四、JavaScript中的cookie

1、读取cookie

let c = document.cookie;
console.log( c );

2、创建cookie

设置cookie字段中的属性。

document.cookie="user=Hello world"; 
document.cookie="username=hello; expires=Thu, 18 Dec 2020 12:00:00 GMT"; //设置了过期时间的

3、修改cookie

覆盖旧的cookie即可。

document.cookie="user=Hello world2"; 

4、删除cookie

 设置过期时间为过去的时间即可。

document.cookie="user=Hello world2; expires=Thu, 18 Dec 2017 12:00:00 GMT"; 
发布了45 篇原创文章 · 获赞 3 · 访问量 7298
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章