浏览器存储(localStorage和sessionStorage)

news2024/11/24 15:23:06

        

        我们知道 js 写的效果,每次刷新都是从新执行,是不存在记录操作的,主要是大部分的效果不需要这样的处理 (一个 tab 切换,焦点图肯定不需要记住运行到哪里,刷新从新开始就好了)!

        在 html5 之前,前端写的效果真的需要存储一些记录,我们都是使用 cookie,对于网站换肤其实可以使用这个处理,今天我们介绍的 sessionStorage 和 localStorage 其实就是类似 cookie 的东西,不过他比 cookie 存储更大,操作更加容易,更符合我们的使用习惯。

一.cookie 的使用

        我们先回忆 cookie 的使用:

1.cookie 的读取

document.cookie="userId=01"; 
document.cookie="userName=hulk";
alert(document.cookie);

        我们会看到设置的内容,我们知道汉字很特殊,作为值设置我们会使用 escape 进行编码处理,和 unescape 解码

2.cookie 设置过期

document.cookie="userId=828; expiress=GMT_String";

        这个就非常重要了,我们一般会选择 3 天,7 天或者 1 个月,这样我们把用户的账户存入 cookie,下次就可以在不超出过期时间内直接登录了,延时的话我们会利用 date 对象并且转为 gmt 形式。

3.cookie 删除

        我们知道到了设置的过期时间会删除 cookie,我们对 cookie 的删除就是把过期设置到当前日期之前的日子

4.cookie 详细介绍

cookie有多种意思:

  1. 储存在用户本地终端上的数据,是网站为了识别用户和跟踪会话而存储在用户本地终端中的文本数据;
  2. 兼容Arduino标准的硬件开发平台;
  3. 集英社创办的月刊少女漫画杂志;
  4. 一种英语单词,意思为“饼干”或“小甜点”。

5. 基于 cookie 的 tab 切换效果

        其原理就是把点击所在的索引存入 cookie,每次刷新页面会读取 cookie 的这个数值做 tab 默认位置的设置,上面说这种处理是在开玩笑,不过这个例子更让大家容易。

大家在服务器环境下运行,涉及到存储这一块:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>cookie</title>
    <style type="text/css">
/*reset*/
*{ padding:0; margin:0}
body{ height: 100%; width: 100%; font-size:12px; color:#333;}
ul{ list-style:none;}
/*demo*/
</style>
</head>
<body>
<div style=" height:300px; width:300px;">
 <div id="list" style=" height:50px; line-height:50px; background:#CC6;">
     <span>标题1</span>
        <span>标题2</span>
        <span>标题3</span>
    </div>
    <div id="con" style=" height:250px;">
     <div style="height:250px;">内容1</div>
        <div style="height:250px;">内容2</div>
        <div style="height:250px;">内容3</div>
    </div>
</div>
</body>
<script type="text/javascript">
window.onload=function(){
 //cookie索引位置获取
 var cookiei=null;
 var strCookie=document.cookie; 
 var cookielist=strCookie.split(";");
 var key="ys";
 for(var i=0;i<cookielist.length;i++){ 
  //alert(unescape(cookielist[i].split("=")[1]));
     if(cookielist[i].split("=")[0]=="ys"){
      cookiei=unescape(cookielist[i].split("=")[1]);
     };
 };
 var st=0;
 var real=cookiei||st;
 //选择器查找
 var list=document.getElementById("list"); 
 var listspan=list.getElementsByTagName("span")
 var con=document.getElementById("con");
 var condiv=con.getElementsByTagName("div");
 //初始化设置,有cookie根据cookie设置无默认用第一个
 for(var i=0;i<listspan.length;i++){
  if(i==real){
   listspan[i].style.color="#fff";
   condiv[i].style.display="block";
  }else{
   listspan[i].style.color="#000";
   condiv[i].style.display="none";
  };
 };
 //事件设置
 for(var i=0;i<listspan.length;i++){
  listspan[i].onclick=function(){
     //alert(this.innerHTML)
    for(var j=0;j<listspan.length;j++){
    if(listspan[j]==this){
      listspan[j].style.color="#fff";
      condiv[j].style.display="block";
      document.cookie="ys="+escape(j); 
    }else{
     listspan[j].style.color="#000";
      condiv[j].style.display="none"
    };
      };
  };
 };
 
};
</script>
</html>

        我们点击到第三个,我们在此刷新发现会定位到第三个显示,实现了记忆处理。

二.sessionStorage、localStorage 本地存储时代

        上面涉及到了 cookie 的介绍,cookie 是放在 document 下,我们感觉有些不能适应是不是,应该在 window 下吧,好吧就是在 document 下,不过我们 ht5 的新特性:

window.sessionStorage
window.localStorage

        实实在在是在 window 下。我们一定要记住使用时用哪个对象,与 cookie 区分。

1. 设置 localStorage

localStorage.a1 = "aaa";
localStorage["a2"] = "bbb";
localStorage.setItem("a3","ccc");

        前 2 个和操作对象一样,后面是提供的方法处理

2. 获取 localStorage

alert(localStorage.a1);
alert(localStorage["a2"]);
alert(localStorage.getItem("a3"));

        同设置,最后的是方法获取

3. 删除 localStorage

localStorage.removeItem("a3");//清除c的值
alert(localStorage.getItem("a3"));

        清除后,返回 null,除了单个清除还有全部清除:

localStorage.clear();
alert(localStorage.a1);
alert(localStorage["a2"]);
alert(localStorage.getItem("a3"));

        另一个用法和 local 差不多就不在做介绍,只不过 session 会在关闭页面后自动删除,同服务端的 session 一样机制。

三.Html5 数据库 web SQL

        ht5 的新特性中,为我们添加了数据库的处理功能,我们可以向服务端一样创建数据库,数据表,增删改查了。

        Html5 数据库 API 是以一个独立规范形式出现,它包含三个核心方法:

  1. openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象。
  2. transaction:这个方法允许我们根据情况控制事务提交或回滚。
  3. executeSql:这个方法用于执行真实的 SQL 查询。

下面是一个使用的实例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>web sql</title>
    <style type="text/css">
/*reset*/
*{ padding:0; margin:0}
body{ height: 100%; width: 100%; font-size:12px; color:#333;}
ul{ list-style:none;}
/*demo*/
</style>
</head>
<body>
<div id="status"></div> 
</body>
<script type="text/javascript">
var db = openDatabase('demodb', '1.0', 'demo', 2 * 1024 * 1024);  
  
db.transaction(function (tx) { 
    tx.executeSql('CREATE TABLE IF NOT EXISTS USERS (id unique, name ,sex)');  
    tx.executeSql('INSERT INTO USERS (id, name ,sex) VALUES (1, "小刚" ,"男")');  
    tx.executeSql('INSERT INTO USERS (id, name ,sex) VALUES (2, "小红" ,"女")');  
    tx.executeSql('INSERT INTO USERS (id, name ,sex) VALUES (3, "小明" ,"男")');  
  
});
db.transaction(function (tx) { 
    tx.executeSql('SELECT * FROM USERS', [], function (tx, results) { 
  var status=document.getElementById("status");
  var rows = results.rows;  
  for(var i=0;i<rows.length;i++){
   var arr=document.createElement("div");
   arr.innerHTML=rows[i].name+"--"+rows[i].sex;
   status.appendChild(arr);
  };
    
 }, null);  
});  
</script>
</html>

我们了解其中的的各个使用方法:

1. 打开数据库

openDatabase('demodb', '1.0', 'demo', 2 * 1024 * 1024); 

        打开数据库,没有时创建,第一个参数 demodb 是数据库名称,第三个参数 demo 是描述,第四个是的大小

2. 执行处理

db.transaction(function (tx) {});

        我们的所有数据表的处理程序都在在这个内部。

3. 创建表

tx.executeSql('CREATE TABLE IF NOT EXISTS USERS (id unique, name ,sex)'); 

        创建表 USERS,没有时会创建,定义有三个字段,id 字段不能重复

4. 插入记录

tx.executeSql ('INSERT INTO USERS (id, name ,sex) VALUES (1, "小刚" ,"男")'); 

        给哪个表插入,哪些字段插入

5. 获取记录

tx.executeSql('SELECT * FROM USERS', [], function (tx, results) {}, null); 

        设置查询条件,会在回调的 results 拿到查询记录,在 results.rows 中存放我们的记录集合:

        记录形式:

[

{id:1,name:"小明",sex:"男"},

{},

{}

]

        都是固定的使用规则,我们如果会 sql 直接可以使用,不会的话看手册也就直接可以使用的。

四。总结

1、cookie 就不用多说了,我们要注意的就是使用是 document.cookie,他的赋值形式是 key=val;key2=val2。删除时时利用过期时间,过期时间是 date 的 gmt 格式。对于中文等设置和获取要使用 escape 编码和解码。

2、sessionStorage 等是在 window 下,和 object 一样的使用规则,同样我自己单出的设置,获取删除和统一删除方法

3、web SQL 其实就是本地数据库的处理形式,利用 sql 语句去处理记录内容,其实在没有出现之前我们利用 json 也会模拟处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1214237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle-动态sql学习笔记,由易至难讲解七个例子

本文章的内容来源于对oracle课堂上讲的内容做出的笔记 静态sql和动态sql 静态sql&#xff1a; 静态 SQL 是在编译时写死的 SQL 语句&#xff0c;即在程序编写阶段&#xff0c;SQL 语句已经被固定下来。 特点&#xff1a; 1.预编译&#xff1a; SQL 语句在程序编译时就会被…

【刷题专栏—突破思维】142. 环形链表 II

前言&#xff1a;本篇博客将讲解三个OJ题&#xff0c;前两个作为铺垫&#xff0c;最后完成环形链表的节点的寻找 文章目录 一、160. 相交链表二、141. 环形链表三、142. 环形链表II 一、160. 相交链表 题目链接&#xff1a;LeetCode—相交链表 题目描述&#xff1a; 给你两个单…

【VSCode】Visual Studio Code 配置简体中文环境教程

介绍 Visual Studio Code&#xff08;简称 VS Code&#xff09;是一款轻量级的代码编辑器&#xff0c;它支持多种编程语言&#xff0c;并且具有丰富的功能和插件扩展。如果你更喜欢使用简体中文界面&#xff0c;那么本教程将向你展示如何在 VS Code 中配置简体中文环境。 步骤…

如何调整图片尺寸:简单实用的教程分享

报名事业编考试的时候&#xff0c;会发现上传照片时会提示图片大小尺寸应该为多少&#xff0c;如果不符合规定就无法提交报名&#xff0c;那么怎么才能修改图片大小呢&#xff1f;最简单的方法就是利用调整照片大小工具来对图片尺寸修改&#xff0c;本文分享一个在线图片处理工…

如何提高领导力?

提升领导力的关键一方面要有正确的自我认知&#xff0c;另一方面就是坚持去实践&#xff0c;没有速成可言&#xff0c;没人那个人天生就具备领导力&#xff0c;有些人我们看起来是具有领导力的&#xff0c;但这些表象的背后可能是家庭环境的潜移默化&#xff0c;也有可能是个人…

智能导诊系统:基于机器学习和自然语言处理技术,可快速推荐合适的科室和医生

智能导诊系统是一种基于人工智能技术的新型系统&#xff0c;它能够为医院提供患者服务和管理&#xff0c;提高医院的管理效率和服务水平。 技术架构&#xff1a;springbootredismybatis plusmysqlRocketMQ 以下是智能导诊系统的应用场景和功能特点&#xff1a; 应用场景 1.患…

一个项目进行测试的一些最基本环境

在一个项目开发到发布的整个过程中&#xff0c;会使用到很多个环境进行测试和运行项目。最基本的开发环境、测试环境、准生产环境、生成环境 一、开发环境 开发环境顾名思义就是我们程序猿自己把项目放到自己的电脑上&#xff0c;配置好以后&#xff0c;跑起来项目&#xff0…

深度学习100例-卷积神经网络(CNN)实现mnist手写数字识别 | 第1天

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3.归一化4.可视化5.调整图片格式 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、知识点详解1. MNIST手写数字数据集介绍2. 神经网络程序说明3. 网…

计算机毕业设计 基于Vue的米家商城系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

解决Qt5.13.0无MySQL驱动问题

一、前言 由于Qt5.12.3是最后提供mysql数据库插件的版本&#xff0c;往后的版本需要自行编译对应的mysql数据库插件&#xff0c;官方安装包不再提供。使用高版本的Qt就需要自行编译mysql驱动。 若没有编译在QT中调用Qsqldatabase库连接mysql时&#xff0c;提示出现如下问题&a…

全国矿产地空间分布数据

我国矿产资源总量丰富、品种齐全&#xff0c;但人均占有量不足世界平均水平&#xff0c;矿产资源质量较差&#xff0c;地理分布不均衡&#xff0c;大型、超大型矿和露采矿较少&#xff0c;开发利用率不足&#xff0c;选矿冶炼技术落后。我国铁矿、锰矿、铬铁矿、铜矿、铝土矿等…

YOLOv5独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…

Postman内置动态参数以及自定义的动态参数

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;内置动态参数 {{$timestamp}} 生成当前时间的时间戳{{$randomInt}} 生成0-1000之间的随机数{{$guid}} 生成随…

基于平衡优化器算法优化概率神经网络PNN的分类预测 - 附代码

基于平衡优化器算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于平衡优化器算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于平衡优化器优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

LeetCode - 141. 环形链表 (C语言,快慢指针,配图)

141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 1. 什么是快慢指针 这里我们我们将介绍环形链表的经典解法——快慢指针&#xff0c;简单理解&#xff0c;指针移动快的叫做快指针fast&#xff0c;移动速度慢的叫慢指针slow。一般我们设快指针走两步&#xff0c;慢指针走…

基于单片机的汽车安全气囊系统故障仿真设计

**单片机设计介绍&#xff0c; 基于单片机微波炉加热箱系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的汽车安全气囊系统的故障检测系统是一种用于检测安全气囊系统故障的智能化设备&#xff0c;通过单片机控…

js中的instance,isPrototype和getPrototypeOf的使用,来判断类的关系

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

conda安装与镜像源配置

下载Anaconda 最好去下面这个国内镜像网站&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载过程中&#xff0c;我勾选了添加到环境变量&#xff08;虽然软件爆红提醒了&#xff09;&#xff0c;取消勾选了设置python3.7为默认python版本。 接下来&…

LLM系列 | 27 : 天工大模型Skywork解读及揭露刷榜内幕引发的思考

引言 简介 预训练 ​语料 分词器 模型架构 Infrastructure 训练细节 评测 实战 总结 思考 0. 引言 晨起开门雪满山&#xff0c;雪晴云淡日光寒。 Created by DALLE 3 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&#xff1a;卖热干面的小女孩。紧接前…

并发编程(多线程)-可见性、有序性、原子性问题

可见性 可见性概念 可见性&#xff08;Visibility&#xff09;&#xff1a;是指一个线程对共享变量进行修改&#xff0c;另一个先立即得到修改后的最新值 可见性演示 案例演示&#xff1a;一个线程根据boolean类型的标记flag&#xff0c;while循环&#xff0c;另一个线程改…