zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [PHP]解决PHP Call to undefined function ldap_connect()
    [Nginx] Nginx配置PHP应用传递PATH_INFO变量
    [PHP]解决PHP Fatal error: Call to undefined function mcrypt_get_iv_size()
    [CentOS] centos下安装最新稳定版nginx
    [CentOS]查看centos的发行版本情况
    [MySQL]创建用户并指定某一数据库权限
    [PHP] 安装memcached扩展
    [http]301和302的区别
    [javascript] 报错SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    [GO项目]开源免费在线客服系统-真正免费开源-GOFLY0.3.5发布-极简强大Go语言开发WEB网页客服
  • 原文地址:https://www.cnblogs.com/youxin/p/2698530.html
Copyright © 2011-2022 走看看