切换语言为:繁体

客户端常用的四种数据临时存储方式LocalStorageI、Cookies、SessionStorage以及IndexDB

  • 爱糖宝
  • 2024-08-01
  • 2054
  • 0
  • 0

写在前面

现代浏览器都具备完善的数据存储功能,为维护用户数据,提高用户体验有着重要意义,这是第三方数据库无法替代的。

数据库存储VS浏览器存储

问题:目前的数据库存储技术方便且成熟,为什么还需要使用浏览器的存储空间呢?

要搞懂这个问题,我们就需要清楚的了解两种产品的定位了。

数据库:

  • 定义:服务端组织、存储和检索数据的系统。

  • 用途:存储大量的用户数据等。

  • 特点:数据持久化,支持多用户并发访问。

浏览器存储

  • 定义:客户端存储数据的系统。

  • 用途:快速访问和存储轻量级数据。

  • 特点:存储空间相对(数据库)较小,数据持久性可灵活切换。

为了更加形象的解释,我们可以大致类比图书馆藏书室、阅读区和顾客三者的关系。

  • 藏书室相当于数据库,存放大量书籍,通常不对外开放,支持多个员工同时管理书籍。

  • 阅读区相当于浏览器存储空间。阅读区可以存放少量书籍,便于访客快速查看。

综上:

尽管数据库提供了强大的数据管理和存储能力,但是在实际应用中,合理利用用户浏览器的存储空间可以显著提高用户体验,减轻服务器负担。

既然浏览器存储空间如此重要,那么我们就来聊聊LocalStorage、SessionStorage和Cookies

浏览器的存储空间

一、LocalStorageI(本地存储)

LocalStorage是Web Storage API的一部分,在浏览器上以键值对的形式存储字符串形式的数据,主要用于持久化存储用户的表单数据。

客户端常用的四种数据临时存储方式LocalStorageI、Cookies、SessionStorage以及IndexDB

  • 特点:

    • 持久性:LocalStorage中存储的数据存在用户设备的硬盘中,能够长期存在,除非被人为清除。

    • 容量:大多数浏览器的LocalStorage的容量是5MB左右。

    • 安全性:通常不随着HTTP请求发送到服务器,但是可能受到脚本攻击,不建议存储敏感数据。

  • 使用方式

//设置
localStorage.setItem('key','value');

//获取
localStorage.getItem('key');

//清除某一数据
localStorage.removeItem('key');

//清空所有数据
localStorage.clear();

如果需要获取或存入对象类型的数据,需要先将内容进行序列化JSON.strigfy()或者反序列化JSON.parse()

二、SessionStorage(会话存储)

其实会话存储和本地存储类似,只是存储的数据生命周期不同。所有在会话存储空间的数据会随着当前会话的结束而销毁。

客户端常用的四种数据临时存储方式LocalStorageI、Cookies、SessionStorage以及IndexDB

会话在浏览器存储技术上的定义是:用户与网页的一次交互过程。具体来说,就是页面从创建到关闭的一段时期。

  • 特点:

    • 持久性:SessionStorage只在标签页的生命周期内有效,页面关闭,数据清除。

    • 容量:大多数浏览器的SessionStorage的容量是5MB左右。

    • 安全性:通常不随着HTTP请求发送到服务器,但是可能受到脚本攻击,不建议存储敏感数据。

  • 使用方式

//设置
sessionStorage.setItem('key','value');

//获取
sessionStorage.getItem('key');

//清除某一数据
sessionStorage.removeItem('key');

//清空所有数据
sessionStorage.clear();

SessionStorage也是以键值对的形式存储字符串形式的数据,可以在用户填入表单数据时存储备份,避免因中途刷新丢失数据。

三、Cookies

Cookies是广泛使用的客户端存储技术。主要用于存储小型文本文件,在浏览器和服务器之间传递信息,使得网站能够记住用户偏好、登录状态等信息。

原理

当用户第一次访问一个网站时,服务器可以向浏览器发送一个Cookie。这个Cookie就会存储在用户浏览器上,每次用户访问网站时,浏览器就将这个Cookie发送给服务器。服务器通过校验Cookie的某些内容(token)就能精准识别出用户,并且根据Cookie里面的信息提供个性化的体验。

特点

cookie的特点和其字段内容有关,总共有9个字段,如下图:

客户端常用的四种数据临时存储方式LocalStorageI、Cookies、SessionStorage以及IndexDB

1.Name

  • 描述:标识Cookie的名称

  • 例如:username

2.Value

  • 描述:具体的数据

  • 示例:novalic

3.Domain

  • 描述:指定Cookie应用于哪个域名

  • 示例:.baidu.com

4.Path

  • 描述:指定Cookie应用于哪些URL路径

  • 示例:/ 表示该域名下的所有路径

5.Expires/Max-Age

  • 描述:Cookie的过期时间或者最大生命周期

  • 示例:Tue, 19 Jan 2021 12:00:00 UTC3600

6.Secure

  • 描述:设置此标志代表只有在使用HTTPS协议时才会发送该Cookie         - 示例:在Cookie中带上Secure关键字即可

7.HttpOnly

  • 描述:设置此标志代表只能使用HTTP协议访问,不能通过JS访问         - 示例:在Cookie中带上HttpOnly关键字即可

8.SameSite

  • 描述:控制Cookie是否随跨站请求一起发送

  • 选项:

    • Strict:不允许跨站请求Cookie

    • Lax:默认情况不发送Cookie,在GET请求下可以跨站发送Cookie

    • None:允许跨站请求Cookie

  • 示例:设置SameSite=Lax

9.Priority

  • 描述:设置Cookie的优先级,控制网络请求时的发送顺序。

  • 选项:

    • High:该 Cookie 应优先发送。

    • Medium:该 Cookie 为中等优先级,默认值。

    • Low:该 Cookie 为低优先级,应在其他 Cookies 之后发送。

  • 示例:设置Priority=High

以上就是Cookie的字段,这些字段让开发者能够对Cookies的行为进行精确控制,具体而言,其大小限制为4KB左右,过期时间、安全性和可访问性等方面都是灵活变化的。

我们来看一下操作Cookies的方式:

//设置Cookie
document.cookie = "
                    username=novalic; 
                    Domain=.baidu.com; 
                    path=/; 
                    expires=86400; 
                    Secure; 
                    HttpOnly; 
                    SameSite=Lax; 
                    Priority=High
                  "
                  
//获取Cookie
function getCookies() { 
    var cookieArray = document.cookie.split('; '); 
    var cookies = {}; 
    cookieArray.forEach(function(cookie) { 
        var keyValue = cookie.split('='); 
        cookies[keyValue[0]] = keyValue[1]; 
    }); 
    return cookies; 
} 
var cookies = getCookies(); 
console.log(cookies.username); 
// 输出 "novalic"

//删除Cookie
//设置过期时间在过去,其他属性保持不变
document.cookie = username +  "
                    =novalic; 
                    Domain=.baidu.com; 
                    path=/; 
                    expires=一个过去的时间
                    Secure; 
                    HttpOnly; 
                    SameSite=Lax; 
                    Priority=High
                  "

场景

Cookies是一种非常实用的客户端存储技术,在会话管理和用户认证等广泛使用。Cookie的管理在服务端进行,存储在浏览器的Cookies存储空间中。

注意事项

  • 安全性:设置 HttpOnly 标志可以防止跨站脚本攻击(XSS)通过 JavaScript 访问 Cookie。设置 Secure 标志可以确保 Cookies 只通过 HTTPS 协议传输,增加安全性。

  • 容量限制:每个Cookie大小不超过4KB,每个域名下的总 Cookie 大小不超过 4KB,超过这个限制可能导致某些 Cookie 无法正常设置。

  • 跨域问题:Cookies 只能由设置它的域名读取,因此如果需要跨域共享 Cookies,需要使用 CORS(跨源资源共享)策略。

  • 隐私考虑:由于 Cookies 可以被用于追踪用户行为,因此应该遵循 GDPR 或其他隐私法规的要求。

拓展

IndexDB

Index也是客户端的一种存储技术,相比于localStoragesessionStorageCookies有着更加强大的存储能力,适合存储大量复杂的数据。

  • 特点:

    • 对象存储:IndexDB允许存储键值对数据,可以是任意的JS对象。

    • 事务支持:IndexDB支持十五,可以确保一组操作要么全部成功,要么全部失败。

    • 索引:IndexDB支持创建索引来加速数据检索。

    • 异步操作:IndexDB支持异步操作,不会阻塞用户数据。

    • 容量:IndexDB的存储容量比本地存储和会话存储大得多,通常每个站点可以达到100M甚至更多。

总之,IndexDB功能强大,但是使用难度也更大。

总结:

以上就是浏览器常见的存储技术,主要是需要掌握LocalStorage、SessionStorage和Cookies,特别是对于Cookies的使用。

0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.