Cookie中一些可能不知道或被忘记的细节:
1. Cookie不能包含空格,分号,逗号等特殊字符。如有有的话,需要在写入时用escape()编码,读取时用unescape()解码。
这是因为,cookie的存储方法是string,而不是数组,不同键值之间是用; (逗号+空格)分开。
document.cookie = "name1=value1"; document.cookie = "name2=value2"; document.cookie = "name3=value3"; document.cookie = "name2=value4"; document.write(document.cookie);
为了试验一下cookie的存储,我运行了上面一段代码,有意思的是,在chrome和IE下,输出的结果有细微的区别:
Chrome:name1=value1; name3=value3; name2=value4
IE9:name1=value1; name2=value4; name3=value3
2. 一个cookie键值后可以带三个参数:
expires:过期时间,默认为关闭浏览器时。值为GMT格林威治时间。e.g. var d = new Date(); d.toUTSString()。Date的相关函数:http://www.w3school.com.cn/js/jsref_obj_date.asp
path:可以共享cookie的路径。默认为同目录以及其子目录下所有的脚本。
domain:可共享cookie的域名,比如让www.xx.com和game.xx.com共享cookie,domain=xx.com
document.cookie = "name4=value4;expires="+d.toUTCString()+";path=/;domain=xx.com";
3. cookie的读取
function getCookie(name){ if (document.cookie.length>0){ var start=document.cookie.indexOf(name + "="); if (start!=-1){ start=start + name.length+1; var end=document.cookie.indexOf(";",start); if (end==-1){ end=document.cookie.length; return unescape(document.cookie.substring(start,end)); } } } return ""; }
4. cookie的删除
删除cookie的方法就是设定cookie的过期时间小于当前时间,然后就可以了
var d = new Date(); d.setTime(d.getTime() - 10000); document.cookie = "name=value;expires="+d.toUTSString;