5、理解 localstorage、sessionstorage和cookie

本文详细介绍了前端存储技术,包括Cookie、localStorage和sessionStorage的概念、用途和实现方式,并对比了它们之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Cookie?

Cookie 是一些数据, 存储于你电脑上的文本文件中(Cookie实际上是一小段的文本信息(key-value格式))

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。

Cookie 的作用就是用于解决 "如何记录客户端的用户信息":

  • 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
  • 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。

1.Cookie的创建 、读取、及删除

//创建 cookie
document.cookie="username=John Doe";

//为 cookie 添加一个过期时间(以 UTC 或 GMT 时间),默认情况下,cookie 在浏览器关闭时删除
document.cookie="username=John Doe; expires=Thu, 18 Dec 2021 12:00:00 GMT";

//使用 path 参数告诉浏览器 cookie 的路径。默认情况下,cookie 属于当前页面
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

//读取 Cookie;	
//document.cookie将以字符串的方式返回所有的cookie,类型格式:cookie1=value; cookie2=value; 
var x = document.cookie;

//修改 Cookie
//修改 cookie 类似于创建 cookie,旧的 cookie 将被覆盖。
document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

//删除 Cookie
//只需要设置 expires 参数为以前的时间即可
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
//注意,当您删除时不必指定 cookie 的值。

2.Cookie 字符串

document.cookie 属性看起来像一个普通的文本字符串,其实它不是。

即使您在 document.cookie 中写入一个完整的 cookie 字符串, 当您重新读取该 cookie 信息时,cookie 信息是以名/值对的形式展示的。

如果设置了新的 cookie,旧的 cookie 不会被覆盖。 新 cookie 将添加到 document.cookie 中。

如果需要查找一个指定 cookie 值,则必须创建一个JavaScript 函数在 cookie 字符串中查找 cookie 值。

3.JavaScript Cookie 实例

  1. 设置 cookie 值的函数
  2. 获取 cookie 值的函数
  3. 检测 cookie 值的函数

具体实例见菜鸟教程(JavaScript Cookie )

二、什么是 localStorage?

localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。localStorage 属性是只读的。

localStorage特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

1.语法

window.localStorage
//保存数据语法:
localStorage.setItem("key", "value");
//读取数据语法:
var lastname = localStorage.getItem("key");
//删除数据语法:
localStorage.removeItem("key");

2.locaStorsge的使用

//判断浏览器是否支持 localStorage 这个属性
if(! window.localStorage){
    alert("浏览器不支持localstorage");
    return false;
}else{
    //写入方法——3种
    var storage=window.localStorage;
    //写入a字段
    storage["a"]=1;
    //写入b字段
    storage.b=1;
    //写入c字段
    storage.setItem("c",3);
    console.log(typeof storage["a"]);
    console.log(typeof storage["b"]);
    console.log(typeof storage["c"]);

    //读取方法——3种
    //第一种方法读取
    var a=storage.a;
    console.log(a);
    //第二种方法读取
    var b=storage["b"];
    console.log(b);
    //第三种方法读取
    var c=storage.getItem("c");
    console.log(c);

    //更改a键的值为4
     storage.a=4;
    console.log(storage.a);   //4

    //删除
    //1、将localStorage的所有内容清除
    storage.clear();
    console.log(storage);    //此时为空,长度为0
    //2、 将 localStorage 中的某个键值对删除
    storage.removeItem("a");
    console.log(storage.a);   //此时storage中已经不出在a键了
    
    //获取键
    for(var i=0;i<storage.length;i++){
    var key=storage.key(i);
    console.log(key);
    //使用 key() 方法,向其中输入索引即可获取对应的键
}
}

3.localStorage 的优势

  • localStorage 拓展了 cookie 的 4K 限制。
  •  localStorage 会可以将第一次请求的数据直接存储到本地,这个相当于一个 5M 大小的针对于前端页面的数据库,相比于 cookie 可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的。

4.localStorage 的局限

  • 浏览器的大小不统一,并且在 IE8 以上的 IE 版本才支持 localStorage 这个属性。
  •  目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换。
  •  localStorage在浏览器的隐私模式下面是不可读取的。
  •  localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。
  •  localStorage不能被爬虫抓取到。

三、什么是 sessionStorage?

sessionStorage 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。

1.语法

window.sessionStorage
//保存数据语法:
sessionStorage.setItem("key", "value");

//读取数据语法:
var lastname = sessionStorage.getItem("key");

//删除指定键的数据语法:
sessionStorage.removeItem("key");

//删除所有数据:
sessionStorage.clear();

2.sessionStorage的使用

大致与localstorage使用方法相同,可参考上面内容。

四、 localstorage、sessionstorage和cookie的区别

  • localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。
  • 若想在浏览器窗口关闭后还保留数据,可以使用 localstorage 属性, 该数据对象没有过期时间,今天、下周、明年都能用,除非你手动去删除。
  • 只想将数据保存在当前会话中,可以使用 sessionstorage属性, 该数据对象临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值