一、什么是Cookie?
Cookie 是一些数据, 存储于你电脑上的文本文件中(Cookie实际上是一小段的文本信息(key-value格式))
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookie 的作用就是用于解决 "如何记录客户端的用户信息":
- 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
- 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
1.Cookie的创建 、读取、及删除
//创建 cookie
document.cookie="username=John Doe";
//为 cookie 添加一个过期时间(以 UTC 或 GMT 时间),默认情况下,cookie 在浏览器关闭时删除
document.cookie="username=John Doe; expires=Thu, 18 Dec 2021 12:00:00 GMT";
//使用 path 参数告诉浏览器 cookie 的路径。默认情况下,cookie 属于当前页面
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
//读取 Cookie;
//document.cookie将以字符串的方式返回所有的cookie,类型格式:cookie1=value; cookie2=value;
var x = document.cookie;
//修改 Cookie
//修改 cookie 类似于创建 cookie,旧的 cookie 将被覆盖。
document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
//删除 Cookie
//只需要设置 expires 参数为以前的时间即可
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
//注意,当您删除时不必指定 cookie 的值。
2.Cookie 字符串
document.cookie 属性看起来像一个普通的文本字符串,其实它不是。
即使您在 document.cookie 中写入一个完整的 cookie 字符串, 当您重新读取该 cookie 信息时,cookie 信息是以名/值对的形式展示的。
如果设置了新的 cookie,旧的 cookie 不会被覆盖。 新 cookie 将添加到 document.cookie 中。
如果需要查找一个指定 cookie 值,则必须创建一个JavaScript 函数在 cookie 字符串中查找 cookie 值。
3.JavaScript Cookie 实例
- 设置 cookie 值的函数
- 获取 cookie 值的函数
- 检测 cookie 值的函数
二、什么是 localStorage?
localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。localStorage 属性是只读的。
localStorage特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。
1.语法
window.localStorage
//保存数据语法:
localStorage.setItem("key", "value");
//读取数据语法:
var lastname = localStorage.getItem("key");
//删除数据语法:
localStorage.removeItem("key");
2.locaStorsge的使用
//判断浏览器是否支持 localStorage 这个属性
if(! window.localStorage){
alert("浏览器不支持localstorage");
return false;
}else{
//写入方法——3种
var storage=window.localStorage;
//写入a字段
storage["a"]=1;
//写入b字段
storage.b=1;
//写入c字段
storage.setItem("c",3);
console.log(typeof storage["a"]);
console.log(typeof storage["b"]);
console.log(typeof storage["c"]);
//读取方法——3种
//第一种方法读取
var a=storage.a;
console.log(a);
//第二种方法读取
var b=storage["b"];
console.log(b);
//第三种方法读取
var c=storage.getItem("c");
console.log(c);
//更改a键的值为4
storage.a=4;
console.log(storage.a); //4
//删除
//1、将localStorage的所有内容清除
storage.clear();
console.log(storage); //此时为空,长度为0
//2、 将 localStorage 中的某个键值对删除
storage.removeItem("a");
console.log(storage.a); //此时storage中已经不出在a键了
//获取键
for(var i=0;i<storage.length;i++){
var key=storage.key(i);
console.log(key);
//使用 key() 方法,向其中输入索引即可获取对应的键
}
}
3.localStorage 的优势
- localStorage 拓展了 cookie 的 4K 限制。
- localStorage 会可以将第一次请求的数据直接存储到本地,这个相当于一个 5M 大小的针对于前端页面的数据库,相比于 cookie 可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的。
4.localStorage 的局限
- 浏览器的大小不统一,并且在 IE8 以上的 IE 版本才支持 localStorage 这个属性。
- 目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换。
- localStorage在浏览器的隐私模式下面是不可读取的。
- localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。
- localStorage不能被爬虫抓取到。
三、什么是 sessionStorage?
sessionStorage 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
1.语法
window.sessionStorage
//保存数据语法:
sessionStorage.setItem("key", "value");
//读取数据语法:
var lastname = sessionStorage.getItem("key");
//删除指定键的数据语法:
sessionStorage.removeItem("key");
//删除所有数据:
sessionStorage.clear();
2.sessionStorage的使用
大致与localstorage使用方法相同,可参考上面内容。
四、 localstorage、sessionstorage和cookie的区别
- localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。
- 若想在浏览器窗口关闭后还保留数据,可以使用 localstorage 属性, 该数据对象没有过期时间,今天、下周、明年都能用,除非你手动去删除。
- 只想将数据保存在当前会话中,可以使用 sessionstorage属性, 该数据对象临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。