• 三大缓存技术--localStorage、sessionStorage、Cookie


    一、客户端存储

    • web应用允许使用浏览器提供的API将数据存储在客户端电脑上

    • 客户端存储遵守“同源策略”,不同的站点页面之间不能相互读取彼此的数据

    • 在同一个站点的不同页面之间,存储的数据是共享的

    • 数据的存储有效期可以是临时的,比如关闭浏览器数据就销毁; 也可以是永久的,可以在客户端电脑上存储任意时间

    二、Cookie

    1)创建cookie:

    1.  function setCookie(name, value, exdays) {
    2.             var d = new Date();
    3.             d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    4.             var expires = "expires=" + d.toGMTString();
    5.             document.cookie = name + "=" + value + "; " + expires
    6.         }
    7.  setCookie("haha",123,30)

    2)获取cookie:

    1. function getCookie(name) {
    2.             var name = name + "=";
    3.             var ca = document.cookie.split(';');
    4.             for (var i = 0; i < ca.length; i++) {
    5.                 var c = ca[i].trim();
    6.                 if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); }
    7.             }
    8.             return "";
    9.         }
    10.    //打印所有cookie
    11.   console.log(document.cookie)

    3)判断是否有某个cookie:

    1. function checkCookie() {
    2.             var user = getCookie("username");
    3.             if (user != "") {
    4.                 alert("欢迎 " + user + " 再次访问");
    5.             }
    6.             else {
    7.                 user = prompt("请输入你的名字:", "");
    8.                 if (user != "" && user != null) {
    9.                     setCookie("username", user, 30);
    10.                 }
    11.             }
    12.         }

    4)实例: 

    1. <input type="text" id="name">
    2. <input type="text" id="pwd">
    3. <button onclick="fn()">保存button>
    4. <script>
    5. function fn(){
    6. var name = document.querySelector("#name");
    7. var pwd = document.querySelector("#pwd");
    8. var exday = new Date(new Date().getTime()+1000*60*60*24*30)
    9. // 分号前面是用户缓存的内容,后面是对这些内容的一些设置(有效期等)
    10. document.cookie = `name=${name.value}&pwd=${pwd.value};expires=${exday}`;
    11. }
    12. window.onload=function(){
    13. // 获取cookie的值
    14. console.log(document.cookie);
    15. }
    16. script>

     5)拓展:

    cookie属性:name、value、expires、domain、path、secure、max-age、HttpOnly。

    name:

    • name 属性是必需的,它是一个键值对,用于指定Cookie的键

    value:

    • value 属性是必需的,它是一个键值对,用于指定Cookie的值

    expires:

    • expires 属性用于指定Cookie过期时间
    • 它采用UTC或GMT格式  通过new Date().toUTCString()或new Date().toGMTString()获取
    • 若不设置该属性或设为null,Cookie只在当前会话有效,一旦关闭浏览器窗口,当前Session结束,该Cookie就会被删除
    • 浏览器根据本地时间,决定Cookie是否过期,由于本地时间是不精确的,所以没有办法保证Cookie一定会在服务器指定的时间过期
    • 当设置的失效时间大于等于1天时:可以在 expires 属性后面直接输入XX天数
    1. Cookies.set('name', 'value', {
    2.    expires: 7,
    3. })

    • 当设置的失效时间少于一天时:需要在当前的时间上加上失效时间。
    1. //下面是设置cookie的失效时间为15分钟。
    2. var m= new Date().getTime()
    3. var expiresTime = new Date(m + 60 * 1000 * 15)
    4. Cookies.set('name', 'value', {
    5.  expires: expiresTime,
    6.  })
    • 当expires设置一个过去的时间点,那么这个cookie 会被立即删掉(失效)

    domain:

    • domain属性指定Cookie所在的域名  如baidu.com  若未指定则默认为设定该Cookie的域名
    • 所指定的域名必须是当前发送Cookie的域名的一部分,如当前访问的域名是example.com,就不能将其设为google.com
    • 只有访问的域名匹配domain属性,Cookie才会发送到服务器

    path:

    • path属性用来指定路径且必须是绝对路径  若未指定则默认为请求该Cookie的网页路径
    • 只有path属性匹配向服务器发送的路径,Cookie才会发送
    • 这里的匹配不是绝对匹配,而是从根路径开始,只要path属性匹配发送路径的一部分,就可以发送
    • 如path属性等于/blog,则发送路径是/blog或者/blogroll,Cookie都会发送
    • path属性生效的前提是domain属性匹配

    secure:

    • secure属性用来指定Cookie只能在加密协议HTTPS下发送到服务器
    • 该属性只是一个开关,不需要指定值  如果通信是HTTPS协议该开关会自动打开

    max-age:

    • max-age属性用来指定Cookie有效期
    • 正常情况下,max-age的优先级高于expires,但是二者有一些细微差别

    HttpOnly:

    • HttpOnly属性用于设置该Cookie不能被JavaScript读取(即document.cookie不会返回该Cookie的值)
    • 只用于向服务器发送 主要是为了防止XSS攻击盗取Cookie

    三、localStorage和sessionStorage的API

    • setItem():将对应的名字和值传递进去,可以实现数据存储
    • getItem():将名字传递进去,可以获取对应的值
    • removeItem():将名字传递进去,可以删除对应的值
    • clear():删除所有的缓存值,不需要参数
    • length:属性,获取键值对总数
    • key():传入位置数,获取存储的值的名字

    注:localStorage和sessionStorage是window的两个属性 他们代表同一个Storage对象

    四、localStorage

    • 永久性保存
    • setItem(string key, value):保存 ​
    • getItem(string key):获取 ​
    • clear():清空 ​
    • removeItem(sring key):根据键得到值

      实例:

    1. <input type="text" id="box1">
    2. <button onclick="localStorage1()">LocalStorage存数据button>
    3. <button onclick="getlocalStorage1()">LocalStorage取数据button>
    4. <button onclick="clear1()">LocalStorage清除数据button>
    5. <script>
    6. function localStorage1(){
    7. window.localStorage.setItem("username","haha")
    8. window.localStorage.setItem("touxiang","一张图片的链接")
    9. }
    10. function getlocalStorage1(){
    11. var re=window.localStorage.getItem("username")
    12. console.log(re)
    13. }
    14. function clear1(){
    15. window.localStorage.clear()
    16. }
    17. script>

    五、sessionStorage

    • 关闭浏览器数据就自动全部删除
    • sessionStorage.length:​返回一个整数  表示存储在sessionStorage对象中的数据项(键值对)数量
    • sessionStorage.key(int index):返回当前sessionStorage对象的第index序号的key名称  若没有就返null
    • sessionStorage.getItem(string key) :返回键名(key)对应的值(value)   若没有就返回null
    • sessionStorage.setItem(string key, string value) :接收一个键名(key)和值(value)作为参数,将键值对添加到存储中;若键名存在,则更新其对应的值
    • sessionStorage.removeItem(string key) :将指定的键名(key)从sessionStorage对象中移除
    • sessionStorage.clear() :清除 sessionStorage 对象所有的项

       实例(与localStorage相似):

    1. <input type="text" id="box1">
    2. <button onclick="sessionStorage()">sessionStorage存数据button>
    3. <button onclick="sessionStorage1()">sessionStorage取数据button>
    4. <button onclick="clear1()">sessionStorage清除数据button>
    5. <script>
    6. function sessionStorage1() {
    7. window.sessionStorage.setItem("username", "haha")
    8. window.sessionStorage.setItem("touxiang", "一张图片的链接")
    9. }
    10. function getsessionStorage1() {
    11. var re = window.sessionStorage.getItem("username")
    12. console.log(re)
    13. }
    14. function clear1() {
    15. window.sessionStorage.clear()
    16. }
    17. script>

    六、localStorage和sessionStorage的区别

    (1)有效时间:

    • localStorage:存储的数据是永久的,用户可以主动清除这些缓存数据的: 如清除历史记录
    • sessionStorage:存储的数据在窗口或标签关闭时数据丢失;在一个标签前进后退时数据不会丢失

    (2)作用域:

    • localStorage的作用域限制在文档源: 文档源由协议、域名、端口三者来确定
    • localStorage同源的文档之间可以相互访问和修改相同名称的数据
    • localStorage受浏览器厂商的限制,chrome存储的数据360浏览器不可访问   会得到‘Invalid Date’
    • sessionStorage在localStorage的同源策略基础上,有更严格的限制:
    • 他还被限制在窗口中,意思是同一个窗口或标签页的不同页面之间可以共享sessionStorage
    • 但是不同的窗口或标签页之间不能共享sessionStorage,即便他们是同一个页面地址
    • 窗口是指顶级窗口,如果是多个iframe,他们之间共享sessionStorage

    七、localStorage、sessionStorage、Cookie三者的区别

    (1)存储大小:

    • cookie数据大小不能超过4k 
    • sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大

    (2)有效时间:

    • localStorage: 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据
    • sessionStorage: 数据在当前浏览器窗口关闭后自动删除
    • cookie: 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

    (3)数据与服务器之间的交互方式:

    • cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端
    • sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存

    (4)作用域:

    • localStorage的作用域限制在文档源的
    • localStorage同源的文档之间可以相互访问和修改相同名称的数据
    • localStorage受浏览器厂商的限制:chrome下存储的数据,360浏览器下不可访问
    • sessionStorage在localStorage的同源策略基础之上,还有更严格的限制:被限制在窗口中
    • 即同一个窗口或标签页的不同页面之间可以共享sessionStorage,但不同的窗口或标签页之间不能共享sessionStorage,即便他们是同一个页面地址
    • 这里的窗口是顶级窗口,如果里面有多个iframe,他们之间共享sessionStorage
  • 相关阅读:
    详解Python列表(list)的方法sort()的第一个参数key【简单清晰明了的讲解】
    Ti AM335X工控模块矩阵键盘电路的设计与驱动移植
    实现el-table打印功能,样式对齐,去除滚动条
    产业互联网的商业模式并非平台模式这么简单
    Android自定义组合控件
    参加Ultimate Harvest Moon活动,立即赢取终极版月光女神NFT
    electron桌面应用webSoket实时弹框提示实现
    [附源码]Python计算机毕业设计SSM隆庆祥企业服装销售管理系统(程序+LW)
    GeoJSON转STL:地形3D打印
    1090 合并果子
  • 原文地址:https://blog.csdn.net/qq_56668869/article/details/125968918