javaScript存储

《1》
  1.document对象提供了的cookie
  2.Window对象提供了sessionStorage和localStorage两个存储对象来对网页的数据进行添加、删除、修改、查询操作。
  console.log(typeof(Storage) !== "undefined") //检测浏览器是否支持Storage存储
 
《2》三种数据存储方式,分别是:
  1.cookie
    a.主流浏览器都支持
    b.存储于访问者的计算机中的变量;
    c.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie
    d.注意测试需要在浏览器中服务请求才起作用,直接浏览器打开静态文件不起作用

  2.sessionStorage
    《IE8以上》 《会话存储》 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据

  3.localStorage
    《IE8以上》 《本地存储》 用于《长久保存整个网站》的数据,保存的数据《没有过期时间》,直到手动去除
 
《3》简单例子理解
  1.cookie
    设置cookie的形式:"cookieName1=cookie1^cookieName2=cookie2;expires=" + date
    cookie有一个关键字是expires,它是用来设置cookie的有效期的,默认情况(不设置expires)是当浏览器关闭的时候,自动清除cookie。
    注意设置多个cookie不要用“;”隔开,用 “^” 如上

    删除cookie
      把cookie的expires设置到过去(1970年1月1号) cookie就过期了
 
    修改cookie
      如document.cookie = "password=123;expires=" + date.toGMTString();
      再次请求遇到已经定义过的cookie(username),浏览器会自己修改原来储存的值;如果没有定义过,浏览器则会创建一个新的cookie。

    
<html>
    <head>
    <script type="text/javascript">
        //检查是否已设置 cookie
        function getCookie(c_name){
            //document.cookie 对象存有某些 cookie
            if (document.cookie.length>0)
            {
                c_start=document.cookie.indexOf(c_name + "=")
                //检查指定的 cookie 是否已储存
                if (c_start!=-1)
                    { 
                        c_start=c_start + c_name.length+1 
                        c_end=document.cookie.indexOf(";",c_start)
                        if (c_end==-1) c_end=document.cookie.length
                            return unescape(document.cookie.substring(c_start,c_end))
                    } 
                }
            return ""
        }

        //创建一个可在 cookie 变量中存储访问者姓名的函数(cookie 的名称、值以及过期天数)
        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())
        }

        //如果 cookie 已设置,则显示欢迎词,否则显示提示框来要求用户输入名字。
        function checkCookie()
        {
            username=getCookie('username')
            if (username!=null && username!=""){
                alert('Welcome again '+username+'!')
            }else {
                username=prompt('Please enter your name:',"")
                if (username!=null && username!=""){
                    setCookie('username',username,365)
                }
            }
        }
    </script>

    </head>
    <body onLoad="checkCookie()">
</body>
</html>
                    
 
  2.sessionStorage 和 localStorage
    对象属性:
      length : 返回存储对象中包含多少条数据。
 
    对象方法:
      key(n)   返回存储对象中第 n 个键的名称
      getItem(keyname)     返回指定键的值
      setItem(keyname, value)  添加键和值,如果对应的值存在,则更新该键对应的值。
      removeItem(keyname)  移除键
      clear()  清除存储对象中所有的键

      例子:
        localStorage.setItem("a",JSON.stringify({name:"xusanduo",token:"abcd123"}));
        var local = localStorage.getItem("a");
        console.log(JSON.parse(local))

        sessionStorage.setItem("session","sessionXusanduo")
        console.log(sessionStorage)
 
 
《4》联系与区别:
  相同点:都保存在浏览器端,同源的

  不同点:
    1.传递方式不同
      cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。
 
      sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

    2.数据大小不同
      cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
      存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。
 
      sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

    3.数据有效期不同
      cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。

      sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;
      localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;
 

    4.作用域不同
      cookie也是在所有同源窗口中都是共享的。

      sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;
 
      localStorage 在所有同源窗口中都是共享的;
 
      Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。
      Web Storage 的 api 接口使用更方便。
原文地址:https://www.cnblogs.com/changxue/p/9297469.html