cookie

作者: 聽說_0100 | 来源:发表于2019-03-27 20:53 被阅读0次

    作用:Cookie 是一些数据, 存储于你电脑上的文本文件中。
    当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
    Cookie 的作用就是用于解决 "如何记录客户端的用户信息":

    • 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
    • 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。

    Cookie的使用规范:

    1.使用javascript创建cookie

    JavaScript可以使用document。Cookie属性来创建、取读、及删除cookie。
    JavaScript中创建cookie如下所示:

    Document.cookie=”username=John Doe”;
    

    还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)。默认情况下,cookie 在浏览器关闭时删除:

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

    可以使用 path 参数告诉浏览器 cookie 的路径。默认情况下,cookie 属于当前页面。

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

    属性:title :用于鼠标悬浮的提示信息。
    案例:

    <head>
    <script>
    function setCookie(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;
    }
    function getCookie(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 "";
    }
    function checkCookie(){
        var user=getCookie("username");
        if (user!=""){
            alert("欢迎 " + user + " 再次访问");
        }
        else {
            user = prompt("请输入你的名字:","");
            if (user!="" && user!=null){
                setCookie("username",user,30);
            }
        }
    }
    </script>
    </head> 
    <body onload="checkCookie()"></body>.
    
    效果:
    输入用户名点击确定,再次访问网页是网页会显示你的用户名。例如:QQ

    Coolie

    属性:

    value  //键值对,如test=hello
    expires //绝对过期时间,如new Date(),所以浏览器都支持
    domain  //限定域名,如www.abc.com
    path    //限定路径,如/index
    max-age //相对失效时间,单位为秒;取代expires,冲突则以max-age为准(IE不支持)
    secure  //协议,不需要指定,当HTTPS通信时自动打开
    HttpOnly//仅用于服务器发送,JS无法读取
    

    cookie小饼干,保存在客户端的一个小的文档。每次通信的时候传递给服务器端。服务器端根据进行一系列操作,比如判断用户是否登录状态。
    Cookie一般是服务器要求客服端记录的一部分数据。类似于名牌、门禁卡。Cookie是有过期时间的,过期之后自动删除,依赖于本地机器删除一个文件。
    Cookie只能在本域名之间的不同页面进行数据交互,不能在不同的域名进行交互。
    Cookie的数据是在每一次进行数据交互的时候(或者数据请求的时候)自动携带自动传输。

    1、Cookie的局限性
    • 每一次请求都会自动带上cookie的所有数据,会影响网站的性能。
    • Cookie保存的数据不能太大,一般限制在4k。
    • cookie在本地的操作非常不方便(特别是js)。
    2、js操作cookie
    document.Cookie
    

    cookie的值是一个字符串,不管有多少个cookie,都保存在一个字符串里面的,每一个值之间使用分号隔开,每一个值都是键值对的形式存在的。格式如下:

    key1=value;key2=value2;keyn=valuen;
    

    js并没有提供我们cookie的直接方法,增删改查;
    1)增

    function setCookie(c_name,value,expiredays)
    {
        var exdate=new Date()
        exdate.setDate(exdate.getDate()+expiredays)
        document.cookie=c_name+ "=" +escape(value)+
        ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
    }
    

    2)删

    function deleteCookie(c_name){
        var exdate = new Date();
        exdate.setDate(exdate.getDate()-1);
        document.cookie=c_name+ "=1;expires="+exdate.toGMTString();
    }
    

    3)改:Cookie自身的机制会自动识别设置的key是否具有,如果有那么就自动修改,如果没有那么就新增。

    setCookie()
    

    4)查

    function getCookie(c_name)
    {
    //检测是否具有cookie
    if (document.cookie.length>0)
      {
      //查询是否存在这样的一个cookie
      c_start=document.cookie.indexOf(c_name + "=")
      //是否具有这个cookie
      if (c_start!=-1)
        {
        //不是第一个cookie
        if(c_start!=0){
            var s = document.cookie.charAt(c_start-1);
            // 是不是完全匹配键名
            while(s!=' '){
                c_start = document.cookie.indexOf(c_name+"=",c_start+c_name.length);
                if(c_start==-1){
                    //没找到结束
                    return '';
                }
                s = document.cookie.charAt(c_start-1);
            }
    
        }
    
        //获取出值的第一个位置
        c_start=c_start + c_name.length+1;
        //获取结束位置
        c_end=document.cookie.indexOf(";",c_start)
        //处理最后一个cookie的结束位置
        if (c_end==-1) c_end=document.cookie.length
        return unescape(document.cookie.substring(c_start,c_end))
        }
      }
    return ""
    }
    
    3、使用字符串切割法切割cookie。
    function getCookie(name){ 
    
       var strCookie=document.cookie; 
    
       var arrCookie=strCookie.split("; "); 
    
       for(var i=0;i<arrCookie.length;i++){ 
    
            var arr=arrCookie[i].split("="); 
            if(arr[0]==name)return arr[1]; 
    
        } 
    
    return ""; 
    
    } 
    
    4、使用面向对象的方式操作cookie。
    (function () {
     
        function Cookie() {
        }
     
        /**
         * 获取指定的cookie
         * @param key
         * @returns {undefined}
         */
        Cookie.prototype.get = function (key) {
            this.clear();
            var cookie = document.cookie;
            var cookies = cookie.split(';');
            var value = undefined;
            cookies.forEach(function (c, index) {
                var tmp = c.split('=');
                if (tmp[0] && tmp[0].trim() === key) {
                    if (tmp.length <= 1) {
                        return null;
                    }
                    value = tmp[1];
                }
            })
            return value;
        }
     
        /**
         * 设置cookie
         * @param key
         * @param value
         * @param exdays
         */
        Cookie.prototype.set = function (key, value, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            var expires = 'expires=' + d.toUTCString();
            document.cookie = key + '=' + value + '; ' + expires;
        }
     
        /**
         * 清除cookie
         * @param key
         */
        Cookie.prototype.clear = function (key) {
            /**
             * 清除指定的cookie
             */
            if (key)
                this.set(key, '', -1);
            else {
                /**
                 * 清除所有cookie
                 */
                var keys = this.keys();
                var _this = this;
                keys.forEach(function (item, index) {
                    _this.set(item, '', -1);
                })
            }
     
        }
     
        /**
         * 获取所有cookie名
         * @returns {Array}
         */
        Cookie.prototype.keys = function () {
            var cookie = document.cookie;
            var cookies = cookie.split(';');
            var keys = [];
            cookies.forEach(function (c, index) {
                var tmp = c.split('=');
                keys[index] = tmp[0].trim();
            })
            return keys;
        }
     
        /**
         * 挂载Cookie
         * @type {Cookie}
         */
        window.Cookie = Cookie;
     
     
    })(window);
    
    5、找开源(js-cookie)

    1)创建
    创建简单的cookie

    Cookies.set('name', 'value');
    

    创建有效期为7天的cookie

    Cookies.set('name', 'value', { expires: 7 });
    

    为当前页创建有效期7天的cookie

    Cookies.set('name', 'value', { expires: 7, path: '' });
    

    2)取值

    Cookies.get('name'); // => 'value'
    Cookies.get('nothing'); // => undefined
    

    获取所有cookie

    Cookies.get(); // => { name: 'value' }
    

    3)删除值

    Cookies.remove('name');
    

    如果值设置了路径,那么不能用简单的delete方法删除值,需要在delete时指定路径

    Cookies.set('name', 'value', { path: '' });
    Cookies.remove('name'); // 删除失败
    Cookies.remove('name', { path: '' }); // 删除成功
    //注意,删除不存在的cookie不会报错也不会有返回
    
    session:保存在服务器端的小文件。依赖于cookie的,cookie里面会保存一个sessinID的值

    web存储

    1.localStorage
    用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。没有数据量大小的限制。
    但是这个机制是在前端不会主动传输的,所以他更多的是前端程序员的一种存储机制。不需要每一次传输的数据保存在local。需要每次传输的还是要保存在cookie。
    实用。有时需要有时不需要的数据,需要的时候从local取出来放入cookie。用过之后删除。
    1)检测浏览器是否支持文本存储

    if(typeof(Storage)!=="undefined") 
    { 
    // 是的! 支持 localStorage sessionStorage 对象!
     // 一些代码..... } else { // 抱歉! 不支持 web 存储。 
    }
    

    2)操作手段
    保存数据:

    localStorage.setItem(key,value);
    

    读取数据:

    localStorage.getItem(key);
    

    删除单个数据:

    localStorage.removeItem(key);
    

    删除所有数据:

    localStorage.clear();
    

    得到某个索引的key:

    localStorage.key(index);
    

    2.SessionStorage
    SessionStorage方法针对一个session进行数据存储。当用户关闭浏览器窗口后,数据会被删除但是在本网站的不同页面之间是存在的。
    1)操作
    增,改:

    sessionStorage.[name] = value;
    

    删:

    delete sesionStorage.[name];
    

    查:

    sessionStorage.[name];
    

    3.Web SQL数据库
    是集成在浏览器上的一个小型数据库。兼容不是很高。操作和普通的关系型数据库完全不一样,执行的也是标准的SQL语句。具有数据库数据表数据行这些概念。

    离线缓存

    缓存,用户可在应用离线时使用它们。
    速度,已缓存资源加载更快。
    减少服务器负载,浏览器将只从服务器下载更新过或更改过的资源。
    缓存文件的格式:

    CACHE MANIFEST
        1.css
        2.js
        3.png
    NETWORK:
        1.php
        2.jsp
    FALLBACK:
        /html/ error.html
    

    相关文章

      网友评论

          本文标题:cookie

          本文链接:https://www.haomeiwen.com/subject/vqntbqtx.html