常见前端本地存储

戴权
• 阅读 1958

说一说常用得本地存储方法

  • cookie
  • localStorage
  • sessionStorage

cookie

cookie这个东西我觉得对于前端来讲都不会很陌生,浏览器都会支持cookie
HTTP cookie 在最初得时候适用于客户端存储会话信息用的,在我们发送http请求得时候
,响应头会包含此次会话得会话信息返回给客户端,浏览器回存储这样得会话信息

并且在本地有了cookie之后,每次发送请求都会把信息发送回服务器

cookie得基本使用

cookie 得设置很简单,直接document.cookie赋值就可以,一般情况下cookie得存储格式是

document.cookie = '名字=值';

然后里边可以附带一些选项是选填得

  • expires
  • domain
  • path
  • secure

cookie的选项

expires是设置cookie得过期时间得,如果没有设置expires的话,默认是当前得会话,即关闭浏览器后cookie失效

domain是指定了cookie将要被发送得域,默认是创建了这个cookie得域名

path顾名思义,路径,就是说在请求的时候,url里边必须要存在这个路径,才会发送cookie这个消息头

secure,这个选项是一个标记,不用赋值,这个标记代表着只有通过https创建得请求才能被发送到服务器

上边讲了cookie得创建,那么修改得话是不是和创建一样呢,答案是否定得,
cookie并不能像变量一样随意得修改赋值。

cookie的修改

想要改变cookie得值得话,首先要确定之前讲的四个选项中domain和path都是相同得才可以
,其中有一个不同得时候都会创建出一个新的cookie比如说


    Set-Cookie:name=aa; domain=aaa.net; path=/
        
Set-Cookie:name=aa; domain=aaa.net; path=/xxx

这样的话并不会修改之前得cookie ,只会创建一个新的cookie,再比如说

Set-Cookie:name=aa; domain=aa.net; path=/

Set-Cookie:name=bb; domain=aa.net; path=/

上边这种得话是会把之前得cookie修改掉的

cookie的删除

还有一个cookie得删除

在之前我们说到了在这四个选项之中有一个过期时间,最常用的方法就是给cookie设置一个过期的事件,这样cookie会被浏览器删除,

当然也存在其他的删除情况,比如说浏览器被关闭,或者说 cookie超出限制,这个限制根据不同的浏览器,数量也不一样,一般都是20个

cookie常常被用来跟踪用户信息,或者校验用户身份等等,在cookie里边放一些敏感的信息是很不明智的,因为cookie是明文传输,很容易被别有用心的人利用

另外cookie本身的话,不是那种真正意义上的本地存储,因为cookie的大小最大只有4kb大

sessionStorage

上边有提到cookie的大小问题,在html5的时候,就出现了sessionStorage和localStorage

sessionStorage和localStorage 都受到同源策略限制,就是跨域问题,在访问sessionStorage和localStorage 的时候,页面必须在同一个域名,使用同一个协议,并且一个端口

sessionStorage在使用中有很严格的要求,他在一个tab页里边不能被另一个tab页使用

应用的场景有,比如说我们都制动,在页面刷新的时候,我们写的js里边的变量函数等等的,内存会被释放掉,那么这个时候可以用sessionStorage来存储一些不想被释放掉内存的数据,比如说记录一个滚动条的位置,或者播放器的进度等等

sessionStorage会在标签页被关闭的时候呗清空

sessionStorage和localStorage 也有大小限制,相比cookie就大了很多,是5M

localStorage

现在说一说这个localStorage,刚才又说到sessionStorage是不可以跨页的,那么这个限制,对于我来讲我感觉叫他本地存储是有点牵强的,下边要说的这个localStorage,他和sessionStorage有些不同,他可以进行跨页读取,并且他是一个真正的本地存储,他并不会因为浏览器的关闭而清除数据,如果你不进行手动清除的话,他是会一直存在的

storage 事件通讯

storage事件是可以跨页面通讯的,在你对storage对象进行任何操作的时候,都会出发storage事件

事件里边包括

  • domain:发生变化的存储空间的域名
  • key:设置或者删除的键名
  • newValue:如果是设置值,则是新值;如果是删除键,则是null
  • oldValue:键被更改之前的值

storage的使用

那么,在上边说了这么多屁话之后,他到底是怎么用的呢。

常用的api 有

<!--存储-->
setItem('name','val')

上边这个setItem是storage的一个方法用来存储数据,第一个变量是键,第二个变量是存储得值

也可以直接用属性名称赋值 比如说

sessionStorage.name='123'

同理取值,相比也能猜出来了

    <!--存储-->
getItem('name')

只需要传一个键名进去就可以取到对应得值

同理也可以直接去点属性名称

sessionStorage.name

需要注意得是 storage只能存储字符串,如果是对象或者数组等等其他数据类型得时候需要转译一下才可以存储

以上是对前端常用本地存储得一些认识,当然还有前端数据库比如说indexedDB Web SQL 等等,这些会在下次得时候介绍给大家,有不足之处,希望支出

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
戴权
戴权
Lv1
正是江南好风景,落花时节又逢君。
文章
3
粉丝
0
获赞
0