• 数据存储


    1.1 cookie的组成部分

    组成 注释
    name 名称
    value
    expires(可选) 过期时间
    path(可选) 路径
    domain(可选)
    secure(可选) 安全性
    1.1.1 name和value

    name和value是cookie必选的部分,且必须在cookie字符串的开头。其中分号是用作不同部分的分隔符,而不会存储在其值中。并且cookie默认是不存储类似特殊符号的,除非使用编码。

    //如果没有设置生存期,默认情况下cookie会在浏览器被关闭后过期
    document.cookie = "UserName=Morra;";
    
    1.1.2 expires

    //过期时间的格式与toUTCString()的格式相同

    //一般情况下name,value,expires这三部分用的比较多
    document.cookie = "UserName=Morra;expires=Tue,28 Dec 2020 00:00:00 GMT;";
    
    //把过期时间设置为6周后
    var expires = new Date();
     expires.setMonth(expires.getMonth()+6); 
    document.cookie = "UserName=Morra;expires="+expires.toUTCString()+";";
    

    注意:当用户删除了cookie或者cookie数量达到上限,cookie会在过期日期之前就失效。

    1.1.3 path

    path属性是区分大小写的。

    document.cookie = "UserName=Morra;expires=Tue,28 Dec 2020 00:00:00 GMT;path=/mysite;";
    

    cookie是在不同域中当然是不能互访的,并且在同一个域的不同目录(前提是同级目录)也是不能互访。比如
    www.google.com/morra与ww.google.com/jack的cookie也是不能互访的,但是path目录的子目录之间的cookie是可以互访的,如下:

    //ww.google.com/mysite/jack与ww.google.com/mysite/morra之间的cookie是可以互访的
    document.cookie = "UserName=Morra;expires=Tue,28 Dec 2020 00:00:00 GMT;path=ww.google.com/mysite;";
    
    1.1.4 domain

    与path类似,用于隔离域之间的cookie互访。一般情况下二级域名之间的cookie是不能互访的,但是当domain属性设置为一个一级域名后,其二级域名之间的cookie就能够互访了。

    //a.google.com与b.google.com之间的cookie能够互访。
    document.cookie = "UserName=Morra;expires=Tue,28 Dec 2020 00:00:00 GMT;path=/mysite;domain=google.com;";
    
    1.1.5 secure

    secure属性是一个布尔值。默认为false。如果设为true,则cookie只会发送给尝试使用安全通道检索它的web服务器,一般在SSL中用的比较多。

    1.2 应用cookie

    编写setCookie()函数来辅助我们进行cookie的设置:

    function setCookie(name, value, path, expires) {
        value = escape(value);  //能把特殊转换为Latin-1字符集中对应的16进制编码,并加上%前缀
     
        if (!expires) {  //如果过期日期为空则,默认把其设置为6个月后过期,
            var now = new Date();
            now.setMonth(now.getMonth() + 6);
            expires = now.toUTCString();
        }
     
     
        if (path) {//path是可选的,如果有path,就把路径加上";Path="前缀
            path = ";path=" + path;
        }
     
        document.cookie = name + "=" + value + ";expires=" + expires + path;       //cookie字符串格式化
    }
     
    //创建了4个cookie
    setCookie("UserName", "Morra");
     
    setCookie("Age", "25");
     
    setCookie("FirstVisit", "28 Dec 2016");
     
    var expires = new Date();
    expires.setMonth(expires.getMonth() + 12);
    setCookie("Name", "Bob","/morra",expires.toUTCString());
     
    //输出
    console.log(document.cookie);
    //结果如下:过期日期没有显示,并且含有路径的cookie也不会显示
    //UserName=Morra; Age=25; FirstVisit=28%20Dec%202016
     
     
    //删除cookie,把时间设为过去的时间即可
    //setCookie("UserName", "", "", "Mon, 1 Jan 2000 00:00:00");
    

    1.3 cookie的局限性

    cookie的局限性如下:

    • 读取cookie需要额外编写两个辅助函数 setCookie()与 getCookie(),相当繁琐。
    • 浏览器每请求一个新的页面的时候,cookie都会被发送过去,这样无形中浪费了带宽。同时也增加了数据风险,一旦cookie被人拦截了,所有的session信息都会被别人获取。
    • 存在过期时间,不能永久存在本地。
    • 当用户禁用cookie的时候,需要额外代码处理这种情况。
    • 浏览器支持的cookie总数有限,一般为50个,为了突破这种限制,可以在一个cookie中存储多条信息,但这种方法治标不治本。
    • cookie在服务器和浏览器之间共享同一块存储空间,使原本就很少的存储空间更加不够用。
    • cookie的作用是与服务器进行交互,作为http规范的一部分而存在。而web存储只是为了在本地存储数据而生的。

    2 web存储

    web存储就是为了解决了以上cookie的若干问题而出现的。其优点是:

    • 数据放在浏览器上,不会传给服务器,专供js开发人员使用。
    • 存储空间比较大,在Chrome和Firefox中,每个域都有5M空间。
    • 本地存储中的数据永久存在,除非手动删除。

    web存储包含两个组件:会话存储本地存储

    会话存储是临时的,关闭浏览器后数据会自动清除,使用 sessionStorage对象访问。

    本地存储永远存在,使用localStorage对象访问

    2.1 定义数据

    web存储的中的数据格式本质上是“键值对”,类似py中的字典。

    //方法一:
    localStorage.setItem("userName","Morra");
     
     
    //方法二:
    localStorage.userName = Morra;
    

    2.2 获取数据

    //方法一:
    var name = localStorage.getItem("userName");
     
     
    //方法二:
    var name = localStorage.userName;
    

    2.3 删除数据

    //方法一:
    localStorage.removeItem("userName");
     
    //方法二:
    localStorage.userName = null;
    

    删除本地存储中的所有键值对

    localStorage.clear();
    

    2.4 把数据存储为字符串

    web存储都是针对字符串的数据存储,键与值都只能是字符串。如果要存储数值或复杂对象,会被自动转换为字符串。所以在存储除字符串以外的数据之前,就需要进行串行化:

    var personOne = {
        name:"Morra",
        age:30,
        gender:"M"
    }
     
    localStorage.person = JSON.stringify(personOne);   //定义数据
     
    var savedPerson = JSON.parse(localStorage.person);  //获取数据
    

    2.5 在Chrome中查看web存储的数据

    F12打开开发工具,单击Application选项卡,左侧的Storage:

  • 相关阅读:
    ffmpeg基本用法
    MySQL中使用like查找汉字 Incorrect string value 解决办法
    mysql存储过程变量的拼接
    解决IIS8中 URLRewriter 不能使用的方法
    Unix系统介绍
    远程控制客户端界面介绍
    远程控制之登录界面设计
    搞了一周,终于把视频流在局域网内传输搞定
    servelet
    前后台贯穿
  • 原文地址:https://www.cnblogs.com/whatisfantasy/p/6230621.html
Copyright © 2020-2023  润新知