Cookie 饼干:即一份数据,由服务器给客户端,且存储在客户端的一份很小的数据
一、为什么会产生Cookie?
- 在程序中,不同的客户端会产生许多会话,故而,会话的跟踪就显得尤为重要。理论上,一个客户端的所有操作都应该属于同一个会话,不同用户的操作与会话不能混淆组合。例如,你购物车内添加了一个商品,隔了10天,你又添加了一个商品,那么,这两个商品应该都呆在你的购物车内。其他用户的商品则呆在他们自己的购物车内。这就是会话的跟踪。
- 而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的(即数据交互完毕,则会话关闭),这就意味着同样一个用户的操作,不在同属于一个会话。例如,你10天后添加的商品不会跟你10天前添加的商品处在同一个购物车内。
- 因此,要跟踪会话,确保会话与操作不至于混乱,就必须引入一种机制去弥补HTTP协议的不足,Cookie就应运而生。
二、常见应用场景
- 例如:
1.各种登陆界面二次登陆时候,会记录你的曾经登陆过的账号与密码
2.各种电商平台中你曾经的浏览记录
3.购物车内的已添加的商品
三、Cookie如何工作?
- 通过前面的笔记,已经了解到,HTTP协议中请求与响应时候,都是带有各自的响应头,体等组团的一堆信息。
- cookie则是这堆信息中的一部分
- 在Request的时候,浏览器将Cookie信息放在HTTP-Request Headers中。
在Response的时候,浏览器保存HTTP-Response Headers信息中的Cookie信息。
其实就是每个客户端通过cookie来给自己设定一个唯一代表自己的标识,以此达到不同会话中不至于混淆
四、Cookie的特点
-
存储特点
- 存储大小,条数受限,跟浏览器版本有关
- 字符编码为Unicode,不支持直接存储中文
- 可靠性差,容易被查看,且可能会因为各种原因被删除
- 几个重要的存储信息:Name、Value、过期时间,域名,路径
- 不可跨域名,同域名下共享一份Cookie,但是不同域名间不能共享(可以通过Domain、Path设置访问权限)
浏览器版本 Cookie的数量限制 Cookie的总大小限制 IE6 20个/每个域名 4095个字节 IE7 50个/每个域名 4095个字节 IE8 50个/每个域名 4095个字节 IE9 50个/每个域名 4095个字节 Chrome 50个/每个域名 大于80000 FireFox 50个/每个域名 4097个字节 -
传输特点
- 每次Request客户端符合domian以及path要求的Cookie都会通过Request Headers传输到服务器端
- 传输的Cookie大小会受到浏览器以及Web服务器的限制
-
安全特点
- Cookie中的信息很容易被查看,建议加密后存储
- Cookie容易被XSS攻击利用,可以设置HttpOnly=true,不允许客户端访问(99.9%的浏览器有效)
- cookie可能被用户删除
五、使用建议
- 不要保存未经加密敏感信息(安全性)
- 如果不需要在客户端访问,设置HttpOnly=true(安全性)
- 设置合理的过期时间(传输效率)
- 不要存储过大的内容(传输效率)不要存储过大的内容(传输效率)
- 不要存储过多的条目(传输效率)不要存储过多的条目(传输效率)
- 设置合理的domian、path,减少不必要的Cookie传输(传输效率)设置合理的domian、path,减少不必要的Cookie传输(传输效率)
- 不要存储非Unicode字符(可用性)不要存储非Unicode字符(可用性)
- 不要存储不可恢复的信息(可靠性)不要存储不可恢复的信息(可靠性)