浏览器存储(localStorage和sessionStorage)

        

        我们知道 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 也会模拟处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DDR SDRAM 学习笔记

一、基本知识 1.SDRAM SDRAM : 即同步动态随机存储器&#xff08;Synchronous Dynamic Random Access Memory&#xff09;, 同步是指其时钟频率与对应控制器&#xff08;CPU/FPGA&#xff09;的系统时钟频率相同&#xff0c;并且内部命令 的发送与数据传输都是以该时钟为基准…

gin索引 btree索引 gist索引比较

创建例子数据 postgres# create table t_hash as select id,md5(id::text) from generate_series(1,5000000) as id; SELECT 5000000postgres# vacuum ANALYZE t_hash; VACUUMpostgres# \timing Timing is on. postgres# select * from t_hash limit 10;id | …

八个开源免费单点登录(SSO)系统

使用SSO服务可以提高多系统使用的用户体验和安全性&#xff0c;用户不必记忆多个密码、不必多次登录浪费时间。下面推荐一些市场上最好的开源SSO系统&#xff0c;可作为商业SSO替代。 单点登录&#xff08;SSO&#xff09;是一个登录服务层&#xff0c;通过一次登录访问多个应…

做外贸一个小失误可能会带来大的损失

在外贸里&#xff0c;虽然很多事情都是不可控的&#xff0c;但是我们还是需要做好自己该做的事情&#xff0c;将危险和不可控降低到最低的程度。那如何能够降低到最低呢&#xff1f; 比如在做合同&#xff0c;发票或者单据的时候&#xff0c;我们可能会喜欢依照公司固定的模板…

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

【iOS】将网络请求封装在一个单例类Manager中(AFNetworking、JSONModel)

项目开发中会请求大量不同的API&#xff0c;若将网络请求三板斧直接写在Controller中会代码十分冗杂&#xff0c;干脆直接将AFNetWorking和JSONModel封装到一个全局的Manager单例类中&#xff0c;在Manager类中进行网络请求和数据解析 导入AFNetworking和JSONModel 参考【iOS…

linux查看端口占用情况

lsof命令 lsof(list open files)命令可以列出当前系统中打开的所有文件&#xff0c;包括网络端口。可以使用lsof命令查看某个端口被哪个进程占用。 具体的命令为&#xff1a;sudo lsof -i :端口号&#xff0c;其中端口号为需要查询的端口号。 netstat命令 使用netstat命令&a…

很全的家政小程序功能开发攻略;

随着互联网的发展&#xff0c;家政行业也逐步走向数字化。为了满足用户的需求&#xff0c;家政APP的开发成为了热门趋势。那么&#xff0c;如何定制开发一款家政APP呢&#xff1f;下面将为大家详细介绍。 1. 明确需求&#xff1a;首先需要明确家政APP的功能&#xff0c;包括预约…

SAP 事件:SET PF-STATUS 和AT LINE-SELECTION共用

Write List中&#xff0c;如果同时使用了SET PF-STATUS 和 AT LINE-SELECTION,会发现双击的时候不好用了&#xff01; 怎么办&#xff1f;其实&#xff0c;只要设置F2功能键”PICK”就OK了。 2007年12月11日修改&#xff1a; 如图&#xff1a; 例: REPORT z_barry_test_pic…

中海达为第七届全国水文勘测技能大赛保驾护航

11月6日至11日&#xff0c;第十届全国水利行业职业技能竞赛暨第七届全国水文勘测技能大赛在广东韶关成功举办。作为本次大赛相关设备技术保障团队&#xff0c;中海达积极提供全方位的技术支持和保障服务&#xff0c;助力大赛顺利进行。 ▲开幕式现场 全国水文勘测技能大赛自199…

【入门Flink】- 11Flink实现动态TopN

基本处理函数&#xff08;ProcessFunction&#xff09; stream.process(new MyProcessFunction())方法需要传入一个 ProcessFunction 作为参数&#xff0c;ProcessFunction 不是接口 &#xff0c; 而是一个抽象类 &#xff0c;继承了AbstractRichFunction&#xff0c;所有的处…

墓园殡仪馆服务预约小程序的作用

生老病死是人之常情&#xff0c;也是每个人需要面对的&#xff0c;墓园作为生活服务行业里特殊的细分类别&#xff0c;往往不被人提起&#xff0c;但又有很高的需求度&#xff0c;几乎可以说每天都有大小生意&#xff0c;比如殡葬用品、祭扫预约、位置服务等。 对墓园管理公司而…

新能源充电桩物联网应用之工业4G路由器

新能源充电桩是智慧城市建设中不可缺少且可持续发展的重要设施&#xff0c;而工业4G路由器物联网应用为其提供了更加高效、智能、实时的管理方式。充电桩通过工业4G路由器可以与充电运营商的管理中心建立稳定的连接&#xff0c;实现双向数据传输&#xff0c;为用户提供优质的充…

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

在线预览编辑PDF::RAD PDF for ASP.NET

RAD PDF for ASP.NET作为功​​能最齐全的基于 HTML 的 PDF 查看器、编辑器和 ASP.NET 表单填充器&#xff0c;RAD PDF 为传统 PDF 解决方案提供了灵活而强大的替代方案。与 Adob​​e Acrobat Reader 不同&#xff0c;RAD PDF 几乎可以在任何现代网络浏览器中运行&#xff0c;…

macOS 13.6 及后续系统安装 Asahi Linux 将破坏引导

导读Asahi Linux 是一个致力于为 Apple Silicon 设备带来 Linux 支持的项目&#xff0c;日前有用户反馈称&#xff0c;若在相关设备上安装了 macOS 13.6-14&#xff0c;再安装 Asahi Linux &#xff0c;就会导致系统引导失败&#xff0c;出现“黑屏”情况。 目前 Asahi Linux 项…

第六章(微分方程)

简介 函数是客观事物的内部联系在数量方面的反映&#xff0c;利用两数关系又可以对客观事物的规律性进行研究.因此如何寻求函数关系&#xff0c;在实践中具有重要意义•在许多问题中&#xff0c;往往不能直接找出所需要的函数关系&#xff0c;但是根据问题所提供的情况&#xf…

基于SPI+DMA方式的ws2812b氛围灯控制

好处&#xff1a;相比于gpio控制&#xff0c;可以大大节省CPU的时间&#xff0c;CPU只要将要传输的数据计算好放入内存中&#xff0c;然后发动DMA传输即可&#xff0c;后续整个过程并不需要CPU干预&#xff0c;CPU可以用于做其他的事情。特别是某些带蓝牙的芯片&#xff0c;需要…

P6入门:项目初始化9-项目详情之资源Resource

前言 使用项目详细信息查看和编辑有关所选项目的详细信息&#xff0c;在项目创建完成后&#xff0c;初始化项目是一项非常重要的工作&#xff0c;涉及需要设置的内容包括项目名&#xff0c;ID,责任人&#xff0c;日历&#xff0c;预算&#xff0c;资金&#xff0c;分类码等等&…

基于51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

基于 51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功…