cookie

作者: YellowPoint | 来源:发表于2017-09-25 16:21 被阅读0次
    /**
     * 设置cookie
     * @param {string} name  键名
     * @param {string} value 键值
     * @param {integer} days cookie周期
     */
    function setCookie(name, value, days) {
        if(days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        } else {
            var expires = "";
        }
        document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; path=/";
    }
    // 获取cookie
    function getCookie(name) {
        var nameEQ = encodeURIComponent(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 decodeURIComponent(c.substring(nameEQ.length, c.length));
        }
        return null;
    }
    // 删除cookie
    function deleteCookie(name) {
        setCookie(name, "", -1);
    }
    
    1. js高级程序设计上说:大小4095B内,包括名 值 和 ‘’=‘’ ,个数20个内(很多都支持大于20个了)。“尺寸限制影响到一个域下所有的cookie,而并非每个cookie单独限制。” 一开始以为是这个域名下所有的cookie大小不能超过4095B,后来测试后才发现是对每一个cookie的限制,我可以存多个4kb的cookie;不知道那句话是表达问题还是真的有问题。
    2. 还需要注意的是所有的cookie都会由浏览器作为请求头发送,cokie信息越大,完成对服务器请求的时间也就越长,最好是尽可能少存信息,一定不要存重要和敏感的数据;
    3. 可以用JSON.stringify()和JSON.parse() 来存多个键值对
    4. 通过path来设置可操作该cookie的路径,设置为path=/ 则该域名下的都可以操作
    5. 所有的名字和值通过encodeURIComponent()来进行URL编码和decodeURIComponent()来解码;不转码的话,如果有汉字或需要转码的字符则会报错503 页面显示EOF,应该就是在RequestHeaderd的Cookie字段有问题;经测试汉字如果不通过URL编码的话,存在cookie的里面是乱码,但是取出来用又是正常的;编码后还会增加存储空间,如"哈"==>"%E5%93%88",2个字节到要用9个字节了,有一些符号也会转如 " ;等
    6. 汉字是2个字节,字母符号数字是1个字节;如果存的全部都是URL编码后的汉字,最好不要超过450个汉字,包括名和值;超过的就不存了
    7. 安全标志 secure ;则只能在https下的请求才发送cookie

    相关文章

      网友评论

          本文标题:cookie

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