cookie获取遇到的BUG

首先先谈一谈cookie和webstorage

cookie:在性质上是绑定在特定域名下的,当设定了一个cookie后,再给创建他的域名发送请求时,都会包含这个cookie,这个限制确保了存储在cookie中的信息只能让被批准了的接受者访问,而无法被别的域访问。

每个域的cookie总数是有限的吗(这也是webstorage出现的一个原因)

  • IE6以及 更低版本每个域名最多20个cookie、
  • IE7以后最多50个
  • FF最多50个
  • opera最多30个
  • safari chrome没有硬性规定    

若超过单个域名限制之后在设置cookie,浏览器就会清除以前设置的cookie,各个浏览器的处理方式不同,有的是按最近最少使用的方式清除,有的是随机清除。

cookie的构成

名称:cookie名称不区分大小写,且必须经过URL编码的

值:存储在cookie中的字符串值,之必须被URL编码

域:cookie对于那个域是有效的,所以向该域发送的请求中都会包含这个cookie的信息,这个值可以包含子域也可以不包含子域。

路径:可以指定cookie只能从某个特定的路径中访问,别的不能访问。

失效时间:这个值是个GMT格式的时间,用于指定删除cookie的准确时间,若设置的是以前的时间,则cookie会被立刻删除//下面附录cookie封装的函数(呃呃呃,还有一个问题,面试中问的:localstorage  设置失效时间该如何设置,那个删除的时间是60秒该怎么设置。)

安全标志:cookie只有在使用SSL链接的时候才发送到服务器,也就是说只有https给是的才能被发送,http则不能被发送。

cookie的操作有三种:读取,删除,写入

//写入,t为设置时间

function setCookie(key,value,t){
    var oDate=new Date();
    oDate.setDate(oDate.getDate()+t);
    document.cookie=key+'='+value+';expires='+oDate.toGMTString();
}

//删除cookie

function removeCookie(key){
    setCookie(key,'',-1);
}
//获取cookie

function getCookie(key) {
    var arr1=document.cookie.split('; ');
    for(var i=0;i<arr1.length;i++){
        var arr2=arr1[i].split('=');
        if(arr2[0]==key){
            return decodeURI(arr2[1]);
        }
    }
}

webStorage存储机制:

webStorage目的是克服有cookie带来的一些限制,当属需要被严格控制在客户端上时,无需持续的将服务器发送回服务器,webstorage的两个主要目的是:

    提供一种在cookie之外的存储会话数据的机制

    提供一种存储大量可以夸会话的存在的数据的机制。

还是先把问题说完再说别的。我做项目的时候遇到一个问题,死活找不出来,结果发现是一个空格的问题。




如果你要获取的cookie值,不止一个,你会发现,你所获取的每个cookie值后面就会多出一个空格,(我也不太清楚这个空格为什么出现,可能是浏览器解析问题??)  如果你用cookie去存储密码和用户名,当记住密码时,你下次登录密码和用户名会自动填充,但是我当时写的那个获取密码,就一直是undefined,我调试很多遍,最后才发现,每个cookie值后面自动加上一个空格,所以我得改善方法是:在setCookie 函数中,split(“;  ”)

在split中用;空格   分隔。

额鹅鹅鹅,这就是项目中遇到的问题,呃呃呃还不明白在私聊我。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值