zoukankan      html  css  js  c++  java
  • javascript cookie

       什么是cookie?

      cookie就是存储在计算机客户端中变量,每当用户游览器访问一个页面时候,就会发送一个cookie,可以用来存储用户的信息。

         从javascript角度来看,cookie就是一些字符串信息,这些信息存储在客户端计算机中,用来与服务器之间传递数据的。比如document.cookie是返回当前页面可用的(根据cookie域,路径,失效时间和安全设置)所有cookie的字符串,一系列由分号隔开的键值对,

    如:name1=value1;name2=value2;name3=value3;name4=value4.

        1.cookie是有大小限制的,大多数游览器都有大约4KB的长度限制,所以我们最好控制在4095个字节范围内,假如超过这么多字节的话,那么可能超过的那部分被揭掉。

        2.cookie是存储在计算机客户端的文件中,所以cookie存储信息相对来说安全性方面比较弱,因此一些重要信息最好不要用cookie来存储。

        3. cookie是存在有效期的,一般的情况下 cookie的生命周期是:当游览器关闭的时候结束,但是当关闭时候我们还想让cookie存在于游览器中,我们可以设置个有效期,也就是说到什么时候结束。

        4. cookie有路径的概念。对应指定的域中的那个路径,应该向服务器发送cookie,比如你可以指定cookie只有从http://www.baidu.com/index下发送cookie,那么http://www.baidu.com是不能发送cookie的 即使请求都来自于同个域。那么我们怎么样让这个cookie能让父级目录及其他目录都可以访问的到呢?那么我们可以设置path在根目录下,那么不管哪个子目录创建的 都能访问到这个cookie。如下:

    document.cookie = "name=tugenhua;path=/"

          5. cookie有域的概念。比如说a.example.com下的cookie,我们想要让b.example.com目录下能访问到那个a.example.com下的cookie,那要怎么办呢?我们可以如下设置:

    document.cookie = "username=tugenhua;path=/;domain=example.com"

           6.cookie安全性: 通常 cookie 信息都是使用HTTP连接传递数据,这种传递方式很容易被查看,所以 cookie 存储的信息容易被窃取。假如 cookie 中所传递的内容比较重要,那么就要求使用加密的数据传输。

      所以 cookie 的这个属性的名称是“secure”,默认的值为空。如果一个 cookie 的属性为secure,那么它与服务器之间就通过HTTPS或者其它安全协议传递数据。语法如下:

    document.cookie = "username=tugenhua;secure"

       把cookie设置为secure,只保证 cookie 与服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

      下面是我通过看书或者google资料看到的 设置cookie 获取cookie 删除cookie的JS代码如下:

    var cookies = (function(){
        var MILLISECONDS_OF_DAY = 24 * 60 * 60 * 1000;
        var cookies = {
            getCookie: function(name){
                var cookieName = encodeURIComponent(name) + '=',
                    cookieStart = document.cookie.indexOf(cookieName),
                    cookieValue = null;
    
                if(cookieStart > -1){
                    var cookieEnd = document.cookie.indexOf(';',cookieStart);
                    if(cookieEnd == -1){
                        cookieEnd = document.cookie.length;
                    }
                    cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
                }
                return cookieValue;
            },
    
            setCookie: function(name,value,expires,path,domain,secure){
                var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value),
                    date = expires;
                
                // 从当前时间开始 到多少天后过期
                if(typeof date === 'number') {
                    date = new Date();
                    date.setTime(date.getTime() + expires * MILLISECONDS_OF_DAY);
                }
                if(date instanceof Date){
                    cookieText += '; expires=' +date.toUTCString();
                }
    
                if(path) {
                    cookieText += '; path=' + path;
                }
    
                if(domain) {
                    cookieText += '; domain=' + domain;
                }
    
                if(secure) {
                    cookieText += '; secure=' + secure;
                }
                document.cookie = cookieText;
            },
            
            removeCookie: function(name,path,domain,secure) {
                this.setCookie(name,'', new Date(0), path, domain, secure);
            }
        };
    
        return cookies;
    })();

           getCookie方法根据cookie名字获取对应的值,然后查找cookie名加上等于号的位置,如果找到了的话 那么用indexOf方法查找该位置下的第一个分号的位置,如果没有找到分号则说明该cookie是字符串中最后一个,则余下的字符串都是cookie的值,该值使用decodeURIComponent()方法进行解码最后返回,如果没有发现cookie,则返回null.

           setCookie方法接受几个参数,name,value,expires(失效时间),path(路径),domain(域)和secure(安全性 boolean),其中name和value是必须的,其他的都是可选择的,具体的看代码。

           removeCookie方法是 根据name删除对应的cookie。name是必须的 其他的可以选择。具体的也可以看代码。

  • 相关阅读:
    【蛙蛙推荐】GridView和ObjectDataSource更新数据的一个Bug
    忙的顾不上写博客了
    重新启动开源的CRM项目,招募开源精英
    设计一个简单的缓存服务类
    hive的multidistinct可能带来性能恶化
    Linux tail 命令详解
    MapReduce:默认Counter的含义
    hive join
    Linux Top 命令解析 比较详细
    Hive优化总结(转)
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/3297532.html
Copyright © 2011-2022 走看看