javascript cookie

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);
}

http://www.quirksmode.org/js/cookies.html

原文地址:https://www.cnblogs.com/youxin/p/2698530.html