存储类型
他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。
浏览器允许每个域名所包含的cookie数:
IE6-最大限制20条,IE7+允许每个域名50个cookie。Firefox每个域名cookie限制为50个。Opera每个域名cookie限制为30个。Safari/WebKit和chrome没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
且所有浏览器限制每个cookie长度不能超过4KB,否则会被截掉。
所以:现代浏览器cookie个数不要超过50条,大小不能超过4KB。
安全性问题
客服端每次访问服务端都会携带cookie,cookie容易被人拦截,所有的session信息被公开。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。所以:cookie不要保存机密信息,让服务端来确保用户信息安全。
使用场景
cookie每次随HTTP请求一起发送,浪费宽带,移动端推荐使用localStorage。
关于cookie的编码
原来的cookie编码大多使用escape和unescape进行编解码,这个编解码针对普通字母和数字以及*,+,-,.,/,@,_以外的其他字符,可以说是比较简单粗暴的。后来ECMAScript v3(即ES3)已从标准中删除了escape进行编码,分解成了encodeURI(针对URL风格进行编码)和 encodeURIComponent(针对URL风格编码加上URI 组件的标点符号进行编码,比encodeURI要编码的字符更多)。一般来说cookie编码只需要能对"="和";"进行编码即可。
所以在不能使用escape的情况下使用encodeURIComponent编码,decodeURIComponent解码。
生命周期
如果不设置过期时间,那么cookie存储在内存里,如果通过cookie.setMaxAge(num)设置了过期时间,那么浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式;
cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie,
cookie.setmaxage设置为-1时,代表关闭当前浏览器即失效。