HTTP协议是一种无状态、无连接的协议,不能在服务器上保持一次会话的连续状态信息。无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。无连接是指限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,就断开连接,以节省传输时间。
Web服务器几乎没有什么信息可以用来判定是哪个用户发送的请求,也无法记录来访用户的请求序列。cookie的作用是记录用户的有关信息,它最根本的用途是帮助Web站点保存有关访问者的信息。 一、初识cookiecookie是一种能够让网站Web服务器把少量数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术。它是浏览器储存在用户电脑上的一小段文本文件,纯文本格式,不包含任何可执行的代码,以键值对形式存储。cookie规定名称/值是不允许包含分号,逗号,空格的,所以为了不给用户带来麻烦,考虑服务器的兼容性,任何存储cookie的数据都应该被。二、cookie的分类1、临时cookie不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。会话cookie一般不保存在硬盘上而是保存在内存里,可以类比本地存储的sessionStorage。2、永久cookie设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间,可以类比于本地存储的localStorage。三、cookie的属性
1、name代表cookie的名字,一个域名下绑定的cookie,name不能相同,相同的name的值会被覆盖掉。2、value代表cookie的值。3、domain代表cookie绑定的域名,如果没有设置,就会自动绑定到执行语句的当前域。4、path默认是"/"。5、expires/max-agecookie的有效期,Max-Age,是以秒为单位的。Max-Age为正数时,cookie会在Max-Age秒之后,被删除,属于永久cookie;当Max-Age为负数时,不会生出cookie文件,只会存在浏览器内存中,且只会在打开的浏览器窗口或者子窗口有效,一旦浏览器关闭,cookie就会消失,属于临时cookie;当Max-Age为0时,删除cookie,因为cookie机制本身没有设置删除cookie,失效的cookie会被浏览器自动从内存中删除,所以设置Max-Age为0即可让cookie失效。6、secure代表安全,当这个属性设置为true时,此cookie只会在https和ssl等安全协议下传输。7、httpcookie的httpOnly属性,如果这个属性设置为true,就不能通过document.cookie来访问此cookie,只会在http请求头中带有此cookie的信息,能有效的防止xss攻击。8、sizecookie的大小。四、cookie的封装
参考链接:
直击链接:
五、cookie的优劣
1、优点A、兼容性
cookie不存在兼容性问题,IE低版本浏览器也妥妥的支持。B、有效期自由度比较大,可以建临时cookie,也可以建永久cookie。C、作用域cookie在所有同源窗口中都是共享的。2、缺点
A、cookie有数量和长度的限制浏览器一般只允许存放300个cookie,每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。IE和Opera会清理近期最少使用的cookie,Firefox会随机清理cookie。
IE6.0 | IE7,8 | Opera | FF | Safari | Chrome | |
cookie数量 | 20个 | 50个 | 30个 | 50个 | 无限 | 53个 |
cookie大小 | 4095字节 | 4095字节 | 4096字节 | 4097字节 | 4097字节 | 4097字节 |
B、增加流量
cookie每次请求都会被自动添加到Request Header中,在浏览器和服务器间来回传递,无形中增加了流量。cookie信息越大,对服务器请求的时间越长。
C、对开发者不友好
cookie没有现成的API,需要自己去封装方法。
D、cookie有安全性问题。由于cookie在http中是明文传递的,其中包含的数据都可以被他人访问、篡改、盗用。解决方法如下:
//HttpOnly属性如果在cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到cookie信息,这样能有效的防止XSS攻击。//secure属性当设置secure属性为true时,表示创建的cookie会被以安全的形式向服务器传输,也就是只能在 HTTPS连接中被浏览器传递到服务器端进行会话验证,如果是HTTP,连接则不会传递该信息,就无法盗取cookie的具体内容。
六、cookie的应用场景
1、保存用户登录信息
当您访问一个需要登录的界面,例如微博、百度及一些论坛,登录过后一般都会有类似"下次自动登录"的选项,勾选后下次就不需要重复验证,这种就可以通过cookie保存用户的id。2、创建购物车购物网站通常把已选物品保存在cookie中,这样可以实现不同页面之间数据的同步(同一个域名下是可以共享cookie的),同时在提交订单的时候又会把这些cookie传到后台。3、跟踪用户行为通过cookie记录用户的偏好信息,然后向用户推荐个性化推广信息,所以浏览其他网页的时候经常会发现旁边的小广告都是自己最近百度搜过的东西。