COOKIE
由于http是无状态的协议,一旦客户端和服务器的数据交换完毕,就会断开连接,再次请求,会重新连接,服务器单从网络连接上是没有办法知道用户身份的。COOKIE就是为了解决此问题而产生的,每次新的用户请求时,便给用户颁发一个独一无二的身份证,下次访问,必须带上身份证,这样服务器就会知道是哪个用户进行了访问,针对不同用户,做出不同的响应COOKIE是一个很小的纯文本文件(最多为4K),是浏览器储存在用户的机器上的。储存一些服务器需要的信息,每次请求站点,会发送相应的COOKIE,这些COOKIE可以用来辨别用户身份信息等作用。
COOKIE的属性字段
props | intro |
---|---|
name | COOKIE的名称 |
value | COOKIE的值 |
domain | 可以访问COOKIE的域名 |
path | 可以访问此COOKIE的页面路径 |
expires/Max-Age | COOKIE有效的时间 |
Size | COOKIE的大小 |
httpOnly | js能否读取到COOKIE信息 |
secure | 是否只能通过https来传递此条COOKIE |
COOKIE是以纯文本的方式存储,即COOKIE的数据类型为String类型
document.COOKIE = 'name=userInfo'; // 设置COOKIE的name属性 document.COOKIE = 'username=Jack'; // 在COOKIE中存储了username信息 console.log(document.COOKIE); // name=userInfo; username=Jack
document.COOKIE = 'name=userInfo'; // 设置COOKIE的name属性 document.COOKIE = 'username=Amy'; // 在COOKIE中存储了username信息 console.log(document.COOKIE); // name=userInfo; username=Amy
通过上面的实例可以知道,给COOKIE赋值时是不会覆盖COOKIE的原有的值,当等号前的属性名相同时,才会将原来相同属性名的值覆盖为后来设置的值。注意,COOKIE的两个字段之间是通过一个分号和空格分隔,而不是只有一个分号
当要给COOKIE设置非自定义的属性字段时,需要通过字符串追加的方式
例如
let expireDate = new Date(); document.COOKIE += ";expires=" + expireDate.toString();
注意: ";expires="中的分号必须有,如果字段前不加分号则会认为这是一个自定义字段
domain
非顶级域名,如二级域名或者三级域名,设置的COOKIE的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的COOKIE,否则COOKIE无法生成。
顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则COOKIE无法生成。
二级域名能读取设置了domain为顶级域名或者自身的COOKIE,不能读取其他二级域名domain的COOKIE。所以要想COOKIE在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个COOKIE的值了。
顶级域名只能获取到domain设置为顶级域名的COOKIE,其他domain设置为二级域名的无法获取。
总的来说就是,上级域名不能访问下级域名的COOKIE,下级域名可以读取自身及上级域名的COOKIE,同级域名的COOKIE不共享,即同级域名之间不能互相访问对方的COOKIE,只能访问自身的COOKIE。
path
path字段为可以访问此COOKIE的页面路径。 比如domain是abc.com,path是/test,那么只有/test路径下的页面可以读取此COOKIE。
expires/Max-Age
expires/Max-Age 字段为此COOKIE超时时间。若设置其值为一个时间,那么当到达此时间后,此COOKIE失效。不设置此字段时,默认值是Session,即当浏览器关闭(注意:不是浏览器标签页,而是整个浏览器) 后,此COOKIE失效。
let expireDate = new Date("2019-5-26T09:00:00"); document.COOKIE += ";expires=" + expireDate.toString();
若要删除某条COOKIE则设置此条COOKIE的expires为当前时间之前的时间的即可
let expireDate = new Date("1970-01-01T00:00:00"); document.COOKIE += ";expires=" + expireDate.toString();
size
Size字段 此COOKIE大小。
httpOnly
若此属性为true,则只有在http请求头中会带有此COOKIE的信息,而不能通过document.COOKIE来访问此COOKIE,设置为true可以减少受到Xss攻击的风险
secure
secure 字段 设置是否只能通过https来传递此条COOKIE
localstorage/sessionstorage
webstorage并不是要替代COOKIE,而是为了弥补随着web的发展,COOKIE在存储限制(存储容量最多为4k),安全性(在http协议中明文传输)存在的缺点而提出的
两者的API是相同的
function | intro |
---|---|
setItem(key, value) | 以键值对的形式保存一条数据 |
getItem(key) | 根据键来获得值 |
removeItem(key) | 根据键来删除一条数据 |
key(index) | 根据索引获得键的名称 |
clear() | 删除全部数据 |
两者都有length属性
sessionStorage.setItem("name", "Jack"); sessionStorage.setItem("phone", "18856894523"); console.log(sessionStorage.getItem('name')); // Jack console.log(sessionStorage.key(0)); // name console.log(sessionStorage.length); // 2 sessionStorage.removeItem('phone'); console.log(sessionStorage.length); // 1 sessionStorage.clear(); console.log(sessionStorage.length); // 0
两者的比较
COOKIE 与 webstorage的区别
存储限制
数据的有效期
作用域
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。