一、什么是cookie
cookie 用来跟踪用户的会话,与服务器交互,作为http规范的一部分存在。
cookie由w3c组织提出,在客户端记录信息来确定用户身份。session 则是在服务器端记录用户信息。为了实现浏览器多个标签页之间的通信,就用local storage 或cookies等本地存储方式。
一个用户的所有请求都属于同一个会话。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客 户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务 器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
二、Cookie的优点:
cookie具有极高的扩展性和可用性。具体体现在下面几个方面:
可控制保存在cookie中seesion 对象的大小;可通过加密和安全传输技术,减少cookie被破解的可能;在cookie中存放不敏感的数据时,不用担心被盗造成的损失;控制cookie的生命周期,不会永远有效,这样偷盗者旧会拿到过期 的cookie。
三、Cookie的缺点:
- Cookie不可以跨域调用;
- 每次请求一个新的页面,cookie都会被发送过去,无形中浪费了带宽;
- 有数量和长度限制,每个特定的域名下最多生成20个cookie,而且cookie 的最大字节为4096,考虑到兼容性问题,不超过4095字节;
- 在安全方面,如果cooki而被人拦截,拦截者可以取得所有的session信息;有的状态不可能保存在客户端,比如为了防止重复提交表单,计数器会放在服务器上,如果把它放在客户端则没有任何作用。
注:(因为cookie不可以实现跨域调用,为了解决跨域问题,可以有以下方法:
- 利用jsonp,其原理是动态插入scipt标签
- Document.domain+iframe
- Window.name、window.postMessage
- 在服务器上设置代理页面
关于webstorage:
上面提到cookie有存储容量的限制,web storage为了更大存储容量设计的,仅仅是为了在本地存储数据而生。Html 5中的web storage有两种存储方式:session storage 和local storage
关于session storage 和 local storage:
Session storage 仅仅是会话级别的存储,用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,会话结束后数据也随之销毁。
Local storage 用于持久化的本地存储,如果不是主动删除,会话永远不会过期。