document.cookie存放了所有的cookie,世界上是一个字符串。形式类似下面的:
fur=blue; food=biscuits; name=Cookie_monster;
每个cookie有 ;分开。
当创建cookie时,一定要确保名字和值不包括空格,逗号或分号。这些字符会在解析cookie时造成错误。在通过http头传输cookie的时候也会引起麻烦。要想在cookie中使用这些字符,最简单的方法是使用escape函数。这个函数会将所有的特殊字符转义。
当读取cookie时,需要使用unescape解除转义。不要对=进行转义,它是作为cookie 的key value分隔符而存在的。
写入cookie直接把cookie 赋值给document.cookie。它的行为方式有点特别。他原先的值不会被想普通的字符串那样被覆盖掉,而是在源字符串末尾加上新值。如果cookie名已经存在了,原有的值会被覆盖掉。
创建cookie
function setCookie(c_name,value,exdays) { var exdate=new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); document.cookie=c_name + "=" + c_value; }
设定cookie过期时间
过期时间加在cookie末尾,他也需要一个分号和其他的cookie字符串分开。然后接着是字符串expires= .时间必须用格林威治
时间来指定。
function getCookie(c_name) { var i,x,y,ARRcookies=document.cookie.split(";"); for (i=0;i<ARRcookies.length;i++) { x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); x=x.replace(/^\s+|\s+$/g,""); if (x==c_name) { return unescape(y); } } }
或者:
function getCookie(searchName) { var cookies=document.cookie.split(";"); for(var i=0;i<cookies.length;i++) { var cookieCrumbs=cookies[i].split("="); var cookieName=cookieCrumbs[0]; var cookieValue=cookieCrumbs[1]; if(cookieName==searchName) { return cookieValue; } } return false; }
使cookie只能通过特定的域和路径访问。
在默认情况下,如果设置了一个cookie,那么这个cookie只能被这个域的其他页面访问,所以如果http://js.sitepoint.com的页面写入了cookie,那么Http://php.sitepoint.com的页面无法访问该cookie。为了允许sitepoint的所以子域访问该cookie,在cookie创建的时候需要指定域范围。在cookie后面加上";domain=domainNam"即可
theCookie+=";domain=sitepoint.com";
document.cookie=theCookie;
现在这个cookie可以被sitepoint的所以子域的页面读取。包含sitepoint.com。
l另外一个访问现在条件是,在默认情况下,cookie只能被同在当前目录中的其他页面或当前目录的子目录中页面访问。所以
http://www.sitepoint.com/scripts/cookie_html 写了一个cookie,
http://www.sitepoint.com/kermit.html 将无法访问。
可以设定允许读取cookie目录的层级。只需在cookie字符串末尾加上一句";path=pathName"即可。
theCookie+=";path=/";
document.cookie=thecookie;
现在该cookie可以被根目录下的所有页面读取。那意味着这个网站的所有页面都可以读取该cookie。
ppk写的3个函数:
function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); .//改成更好exdate.setDate(exdate.getDate() + exdays);
var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); }