说起cookie,不得不说,应该分为ie系和非ie系,至于cookie的格式就不说了。不得不说,http协议中cookie的定义是浏览器支持最差劲的,太不规范了!
除了正常的key-value之外,每个cookie还可以带有以下参数。
1、rfc2109定义了以下的cookie属性
path coment domain max-age secure version
path:
指定cookie的uri路径,每个页面只能访问自己的path和父path的cookie
coment:
cookie注释,实际过程中发现主流的所有浏览器都无法获取这个coment,页面再次请求也不会把这个coment加上去。没发现有什么用
domain:
域名或则ip,没什么好讲的,一般,如果domain错误,页面无法获取这个cookie
secure:
secure 的格式是带有secure 这个key,ex: coname=1; path=/case; secure 后面不带有value。如果带有secure,那么只有https的请求才能访问这个cookie,http则不行
max-age:
相对于客户端的事件,几秒之后cookie失效,比如 max-age=10,那么客户端在收到这个cookie之后,10秒之后,这个cookie需要失效。实际过程中,发现所有ie系的浏览器都不支持这个cookie,而chrome和firefox就支持的很好,其实我个人觉得,max-age比expires这个cookie有用的,因为expires是服务器计算的到指定时间的过期。但是,实际上,客户端是服务器的时间经常会不一致。
version:
和coment差不多,指明cookie版本,实际上看不出浏览器有什么支持,不过带不带好像也没什么问题
2、rfc2969又定义了以下的cookie属性
port discard CommentURL
这些是后面加上的,
port:
cookie的端口,对指定端口有效
discard:
discard=true,则cookie只对当前会话有效,即使设置了expires时间也一样
ComentURL:
和coment类似
实际测试,所有浏览器都还不支持这几个属性
3、因为历史原因,cookie中还有一个expires属性,但是这个属性虽然不再rfc文档里面,但是确实基本上所有浏览器都支持的
expirs:
格式:Set-Cookie: chexpired=expiredok; expires=Tue, 06 Dec 2011 03:49:50 GMT
即服务器返回一个制定格式的时间,客户端在到这个时间的时候,就会让cookie失效
4、因为ie的原因,浏览器还支持httponly这个属性,
httponly这个属性的意思是,当httponly是true的时候,只有使用http协议时候,才能使用这个cookie,其他的js脚本等都不能访问这个cookie