zoukankan      html  css  js  c++  java
  • Cookie

    Cookie

     

     

    什么是Cookie?

    cookie存在的原由和cookie常识

    原由

    常识

    cookie的创建、读取、修改、删除

    创建

    读取

    修改

    删除

    cookie字符串

    cookie域和路径

    cookie实现域之间的访问

    cookie封装

     

     

     

    什么是Cookie?

     

    cookie存在的原由和cookie常识

    原由

    HTTP请求是无状态的,服务器不能判别两次请求是否来源于同一用户,而为了提高性能,W3C使用cookie和session的方式解决这个问题。用cookie来记录客户端用户信息,比如登陆账号密码记录,购物搜索记录等等,提高了用户体验。

     

    常识

    cookie一般是在服务器端创建的(服务器端发送创建cookie的指令,将要创建的cookie信息封装在HTTP请求的Header里),客户端接收到Response后会解读Header里的内容,读取的Set-Cookie指令获取其内cookie信息,设置cookie。当客户端再次请求服务器时会带着那些还存活的cookie,去访问服务器。如果cookie很多,会增加客户端与服务器的数据传输量(这是session产生的原因)。

    cookie是HTTP协议头中的一个字段,虽然HTTP协议本身对这个字段没有多少限制,但是cookie最终还是存在浏览器里,所有不同的浏览器对cookie的存储都有一些限制。

    cookie超时后浏览器会自动清除cookie。

     

    cookie的创建、读取、修改、删除

    JavaScrit使用document.cookie属性来创建、读取和删除cookie

    创建

    document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

    读取

    var x = document.cookie;

    document.cookie 将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; cookie3=value;

     

    修改

    JavaScript 中,修改 cookie 类似于创建 cookie,如下所示:

    document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

    旧得cookie将会被覆盖。

     

    删除

    您只需要设置 expires 参数为以前的时间即可,如下所示,设置为 Thu, 01 Jan 1970 00:00:00 GMT:

    document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

    注意,当您删除时不必指定 cookie 的值。

     

     

    cookie字符串

    document.cookie 属性看起来像一个普通的文本字符串,其实它不是。

    即使您在 document.cookie 中写入一个完整的 cookie 字符串, 当您重新读取该 cookie 信息时,cookie 信息是以名/值对的形式展示的。

    如果您设置了新的 cookie,旧的 cookie 不会被覆盖。 新 cookie 将添加到 document.cookie 中,所以如果您重新读取document.cookie,您将获得如下所示的数据:

    cookie1=value; cookie2=value;

    如果您需要查找一个指定 cookie 值,您必须创建一个JavaScript 函数在 cookie 字符串中查找 cookie 值。

     

    cookie域和路径

    (domain):生成该cookie的域名,如domain="www.taobao.com",由于浏览器是个注意安全的环境,所以不同的域之间是不能相互访问cookie的。路径(path):该cookie是在当前的哪个路径下生成的,如path="/my_car/"。

    cookie实现域之间的访问

    “www.qq.com” 与 “sports.qq.com” 有公用一个关联的域名”qq.com”,我们如果想让”sports.qq.com” 下的cookie被 “www.qq.com” 访问,我们就需要用到cookie 的domain属性,并且需要把path属性设置为 “/“。例:

    document.cookie = “username=Darren;path=/;domain=qq.com“

    cookie封装

    ;(function (document) {
        var Cookie = function () {
        };
        Cookie.prototype = {
            /**
             * 添加一个cookie
             * @param cname cookie名
             * @param cvalue cookie值
             * @param exdays 几天后过期?
             */
            addCookie: function (cname, cvalue, exdays) {
                var d = new Date();
                d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
                var expires = "expires=" + d.toGMTString();
                document.cookie = cname + "=" + cvalue + "; " + expires;
            },
            /**
             * 获取一个cookie
             * @param cname
             * @returns {string}
             */
            getCookie: function (cname) {
                var name = cname + "=";
                var ca = document.cookie.split(';');
                for (var i = 0; i < ca.length; i++) {
                    var c = ca[i].trim();
                    if (c.indexOf(name) == 0) {
                        return c.substring(name.length, c.length);
                    }
                }
                return new ErrorEvent("Can't find the cookie. Are you sure you set it?");
            },
            /**
             * 返回所有cookie
             * @returns {string[]}
             */
            getCookies: function () {
                return document.cookie.split(';');
            },
            /**
             * 删除一个cookie
             * @param cname
             */
            delCookie: function (cname) {
                document.cookie = cname + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
            }
        };
        document.Cookie = new Cookie();
    })(document);
    // 5秒后过期的一个cookie,浏览器会不定时的刷新检查哪些cookie还存活,不存活的就清除。
    document.Cookie.addCookie('kine','吉吉',5/(24*60*60));
    
    
    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    python进阶(1)--多进程与多线程概念
    mysql数据库(5)--表的相关操作
    mysql数据库(4)--表删除操作
    备注
    mysql数据库(3)--mysql的执行顺序
    mysql数据库(2)--窗口函数之序号函数
    Spring MVC 返回中文乱码
    郁闷,郁闷啊
    Struts2 下载文件
    js文件加载
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/13462471.html
Copyright © 2011-2022 走看看