美文网首页
本地存储之cookie和storage

本地存储之cookie和storage

作者: 亚萍 | 来源:发表于2016-12-29 21:10 被阅读243次

    它们都是保存在客户端中的文件,保存的格式都是字符串

    cookie

    1、cookie可能被禁用,当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能
    2、发送http请求时会把cookie放在请求头中,服务器通过cookie来了解客户端状态
    3、大小限制4k左右,低版本浏览器会有数量的限制
    4、可以设置有效时间,超过时间就会消失
    5、安全性不够高,所有的cookie都是以纯文本形式记录与文件中,因此保存用户名和密码等重要信息最好事先加密处理
    6、有路径的概念,可以限制cookie在某个路径下
    7、在同源窗口中都是共享的
    8、cookie是与浏览器相关的,即使是同一个页面,不同浏览器之间所保存cookie的也不能相互访问的
    9、每个cookie都是硬盘上的一个文件,因此很可能被用户删除

    设置cookie:
     document.cookie = "name=aimi; age=20;"  /* 存储多个名/值对,用分号加空格(; )隔开 */
    

    在cookie的名/值中不能使用分号、逗号、等号以及空格。
    在cookie的名中做到很容易,但在保存的值中是不确定的,所以用escape()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储cookie值中,而且使用此种方案还可以避免中文乱码的出现。在取出值后用unescape()进行解码就可以得到原来保存的值。

    获取cookie:
    var strCookie = document.cookie;
    

    一次获取所有的cookie值,而不能指定cookie名称来获取值,这正是处理cookie值最麻烦的地方,需要通过截取字符串循环遍历出某个名称对应的值。

    设置保存有效期:

    没有设置时间的cookie都是单会话,当浏览器关闭后将会丢失,事实上这些cookie仅存储在内存中,而没有建立相应的硬盘文件。
    格式:document.cookie = "name=value; expiress=GMT_String"; /* GMT_String 是以GMT格式表示的时间字符串

    var expiresDays = 30; /* 30天之后过期 */
    var data = new Date().getTime()+expiresDays*24*3600*1000;
    document.cookie = "name=aimi; expires=" + date.toGMTString(); 
    
    删除cookie:

    为了删除一个cookie,可以将其过期时间设定为一个过去的时间。

    var date=new Date();  //获取当前时间
    date.setTime(date.getTime()-10000);  //将date设置为过去的时间
    document.cookie="userId=828; expires="+date.toGMTString(); //将userId这个cookie删除
    
    指定cookie可访问的路径:

    默认情况下,如果在某个页面创建一个cookie,那么该页面所在目录中的其他页面也可以访问该cookie,如果这个目录下还有子目录,则在子目录中也可以访问。例如在www.xxxx.com/html/a.html中所创建的cookie,可以被www.xxxx.com/html/b.htmlwww.xxx.com/ html/ some/c.html所访问,但不能被www.xxxx.com/d.html访问。
    为了控制cookie可访问的目录,需要使用path参数设置cookie,
    doment.cookie = "name=value; path=cookieDir"; 其中cookieDir表示可访问cookie的目录。例如:document.cookie="userId=320; path=/shop";就表示当前cookie仅能在shop目录下使用。
    如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录,例如:

    指定可访问cookie的主机名:

    和 路径类似,主机名是指同一个域下的不同主机,例如:www.google.comgmail.google.com就是两个不同的主机名。默认情况下, 一个主机中创建的cookie在另一个主机下是不能被访问的,但可以通过domain参数来实现对其的控制,其语法格式为:

    document.cookie="name=value; domain=cookieDomain";
    

    以google为例,要实现跨主机访问,可以写为:

    document.cookie="name=value;domain=.google.com";
    

    这样,所有google.com下的主机都可以访问该cookie。
    备注:cookie是引自阿伟~博客

    localStorage

    1、永久保存,可以手动删除
    2、客户端保存,不会请求服务器
    3、在所有同源窗口中是共享的

    sessionStorage

    1、临时会话,从页面打开到页面关闭的时间段窗口的临时存储,页面关闭,本地存储消失
    2、存储限制5M
    3、客户端保存,不会请求服务器
    4、即是同一个页面,在不同的浏览器窗口中不能共享;

    localStorage和sessionStorage操作

    setItem存储value
    sessionStorage.setItem("key","vaule");
    localStorage.setItem("key","vaule")
    
    getItem获取value
    sessionStorage.getItem("key");
    localStorage.getItem("key")
    
    removeItem删除key
    sessionStorage.removeItem("key","vaule");
    localStorage.removeItem("key","vaule")
    
    clear清楚所有的key/value
    sessionStorage.clear();
    localStorage.clear();
    
    其他操作方法:点操作和[]

    web Storage不但可以用自身的setItem,getItem等方便存取,也可以像普通对象一样用点(.)操作符,及[]的方式进行数据存储,像如下的代码:

    varstorage=window.localStorage;storage.key1="hello";storage["key2"]="world";console.log(storage.key1);console.log(storage["key2"]);
    
    localStorage和sessionStorage的key和length属性实现遍历

    sessionStorage和localStorage提供的key()和length可以方便的实现存储的数据遍历,例如下面的代码:

    varstorage=window.localStorage;for(vari=0,len=storage.length;i<len; i++) { var key=storage.key(i); var value=storage.getItem(key); console.log(key+"="+value); }
    

    ###storage事件
    storage还提供了storage事件,当键值改变或者clear的时候,就可以触发storage事件,如下面的代码就添加了一个storage事件改变的监听:

    if(window.addEventListener){window.addEventListener("storage",handle_storage,false);}elseif(window.attachEvent){window.attachEvent("onstorage",handle_storage);}functionhandle_storage(e){if(!e){e=window.event;}}
    

    相关文章

      网友评论

          本文标题:本地存储之cookie和storage

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