Cookie
Cookie是一种弥补HTTP协议无状态连接的不足的机制,使得服务器能够在两次HTTP请求的空白期中,能通过下一次上传Cookie中的数据,跟踪用户行为,保持状态。
Cookie由服务端存储到客户端,并且每次HTTP请求,会通过HTTP协议的请求头发送给服务端的将客户端的数据发送给服务端使用;
Cookies是一种基于客户端的机制,客户端上Cookie直接存储了所有的信息;
Cookie的格式:Cookie:键名:键值;键名:键值;...
Cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1;
Cookie的可选属性:
属性名 | 格式 | 含义 |
---|---|---|
Expires | 时间戳 | 最长有效时间 |
Max-Age | 时间秒数 | 失效之前经过的秒数 |
Domain | 子域名 | 可以送达的主机名 |
Path | URL路径 | 表示指定路径才可以发送Cookie |
Secure | 布尔值 | 为True时只支持安全的HTTPS协议 |
Httponly | 布尔值 | HTTP以外的方式都不能对Cookie进行访问 |
SameSite | Strict Lax | 服务器设定一则 cookie 不随着跨域请求一起发送, 防范跨站请求伪造攻击(CSRF) |
JavaScript中对Cookie的操作:
读取:
var a = document.cookie
写入:
document.cookie='name=xiaoming';
值得注意的是:在JavaScript中写入cookie的值是默认追加,而不是覆盖原来的值.
当带有中文的时候,需要用escape()转化为URL编码。
要删除一个Cookie可以设定过期时间为一个已经过去的值:
var date=new Date(); //获取当前时间
date.setTime(date.getTime()-10000);//将date设置为过去的时间
document.cookie="name=xiaoming;expire="+date.toGMTString();
获取一个Cookie的值:
function getCookie(name){
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==name){
var res=arr[1]
}
} return res;
}
Session
Session也是一种保持状态跟踪用户行为的机制。
Session是一种基于服务端的机制,是服务端为当前用户创建一个session对象,每个session对象,对应的是服务端的一段信息。
Session是一种会话级别的存储信息,每次退出浏览器都会清空。
JavaScript中对Session的操作:
保存数据:
sessionStorage.setItem('key', 'value');
获取数据:
var data = sessionStorage.getItem('key')
删除数据:
sessionStorage.removeItem('key');
删除所有数据:
sessionStorage.clear();
Cookie和Session的对比:
1.存储方式。Cookie信息存储在客户端,Session信息存储在服务端。
2.安全性。客户端的信息永远不可信,当存储重要的隐私信息的时候,Session更加安全。
3.存储量。Cookie存储的信息不能超过4kb,并且一般浏览器会限制一个站点不能存储超过20个Cookie。而Session没有这个限制。
4.生命周期。Cookie可以设置过期时间,在时间到期之前关闭浏览器再次打开依然能生效。Session在浏览器关闭后就会销毁。
5.对服务端影响。session的信息存储在服务端,会对服务端性能产生影响,当考虑到服务端性能而存储的数据又不是很重要的时候,Cookie是一个更好的选择。会缓解服务端的压力。
外链:https://slartbartfast.cn/articlePage.php?articleid=257