js 怎么实现本地存储

选择 localstorage 还是 sessionstorage 取决于数据生命周期需求,localstorage 用于长期保存如用户偏好设置,sessionstorage 用于会话期间临时存储如购物车信息;2. 本地存储限制包括:每域名约 5mb 容量、仅支持字符串类型需用 json.stringify/parse 转换、同步操作可能阻塞主线程;3. 兼容性处理可通过检测 window.localstorage 是否存在,若不支持则降级使用 cookie 或引入 store.js 等库自动适配;4. 安全性方面,本地存储易受用户篡改和 xss 攻击,不应存储敏感信息如密码,必要时应加密并加强 xss 防护;5. 清理本地存储可调用 localstorage.clear() 清空所有数据或 removeitem(‘key’) 删除指定键,也可通过封装 setitemwithexpiry 和 getitemwithexpiry 方法实现带过期时间的自动清理机制;6. 跨域访问受同源策略限制,不同域名无法直接共享本地存储,可通过 postmessage 实现窗口间通信或使用 cors 配合服务器端授权进行数据共享,具体选择依据是共享范围和系统复杂度。

js 怎么实现本地存储

在 JavaScript 中,实现本地存储主要依赖于

localStorage

sessionStorage

这两个 Web API。它们允许你在用户的浏览器中存储键值对,即使关闭浏览器后,

localStorage

中的数据仍然存在,而

sessionStorage

中的数据则会在会话结束后被清除。

localStorage 和 sessionStorage 都是 window 对象的属性,使用起来非常简单。

localStorage.setItem(‘key’, ‘value’) 用于存储数据,localStorage.getItem(‘key’) 用于读取数据,localStorage.removeItem(‘key’) 用于删除数据,localStorage.clear() 用于清空所有数据。

sessionStorage 的用法与 localStorage 完全相同,区别在于数据的生命周期。

如何选择 localStorage 和 sessionStorage?

选择

localStorage

还是

sessionStorage

取决于你的需求。如果需要长期保存数据,例如用户的偏好设置,那么

localStorage

是一个不错的选择。如果只是需要在当前会话中保存数据,例如购物车信息,那么

sessionStorage

更合适。

当然,你也可以根据实际情况,将两者结合使用。例如,使用

localStorage

保存用户的登录状态,使用

sessionStorage

保存用户的临时操作数据。

本地存储有哪些限制?

虽然本地存储很方便,但也有一些限制需要注意。

首先,存储容量有限制。一般来说,每个域名下

localStorage

sessionStorage

的存储容量都在 5MB 左右。不同的浏览器可能会有所差异,但通常不会超过这个范围。因此,不适合存储大量数据。

其次,本地存储只能存储字符串类型的数据。如果要存储其他类型的数据,例如对象或数组,需要先将其转换为字符串,然后再存储。读取数据时,再将其转换回原来的类型。通常可以使用

JSON.stringify()

JSON.parse()

方法来实现这个转换。

另外,本地存储是同步操作。这意味着在读写数据时,会阻塞 JavaScript 线程。如果存储的数据量较大,可能会导致页面卡顿。因此,建议尽量避免在主线程中进行大量的本地存储操作。

如何处理本地存储的兼容性问题?

虽然现代浏览器都支持

localStorage

sessionStorage

,但为了兼容旧版本的浏览器,可能需要进行一些兼容性处理。

一种常见的做法是,先检测浏览器是否支持

localStorage

sessionStorage

,如果不支持,则使用 Cookie 或其他替代方案。

function supportsLocalStorage() {  try {    return 'localStorage' in window && window['localStorage'] !== null;  } catch (e) {    return false;  }}if (supportsLocalStorage()) {  // 使用 localStorage} else {  // 使用 Cookie 或其他替代方案}

另一种做法是,使用一些现成的库,例如

store.js

,它会自动检测浏览器是否支持

localStorage

sessionStorage

,如果不支持,则使用其他替代方案。

本地存储安全性如何?

本地存储的数据存储在用户的浏览器中,因此存在一定的安全风险。

首先,本地存储的数据可以被用户修改。这意味着用户可以篡改你存储的数据,从而影响你的应用程序的正常运行。

其次,本地存储的数据可能会被恶意网站窃取。如果你的网站存在 XSS 漏洞,攻击者可以通过 JavaScript 代码读取你存储在

localStorage

sessionStorage

中的数据。

因此,不建议在本地存储中存储敏感信息,例如用户的密码或信用卡信息。如果必须存储敏感信息,应该对其进行加密处理。

另外,应该注意防范 XSS 攻击,避免恶意代码读取本地存储的数据。

示例代码:使用 localStorage 存储和读取用户信息

以下是一个简单的示例,演示如何使用

localStorage

存储和读取用户信息。

// 存储用户信息function saveUserInfo(username, email) {  const userInfo = {    username: username,    email: email  };  localStorage.setItem('userInfo', JSON.stringify(userInfo));}// 读取用户信息function getUserInfo() {  const userInfoStr = localStorage.getItem('userInfo');  if (userInfoStr) {    return JSON.parse(userInfoStr);  } else {    return null;  }}// 示例用法saveUserInfo('JohnDoe', 'john.doe@example.com');const userInfo = getUserInfo();if (userInfo) {  console.log('Username:', userInfo.username);  console.log('Email:', userInfo.email);} else {  console.log('No user info found.');}

这段代码首先定义了两个函数:

saveUserInfo

getUserInfo

saveUserInfo

函数用于存储用户信息,它接受用户名和邮箱地址作为参数,并将它们存储在

localStorage

中,键名为

userInfo

getUserInfo

函数用于读取用户信息,它从

localStorage

中读取键名为

userInfo

的数据,并将其解析为 JavaScript 对象。

然后,代码演示了如何使用这两个函数。首先,调用

saveUserInfo

函数存储用户信息。然后,调用

getUserInfo

函数读取用户信息,并将用户信息打印到控制台。

这个示例演示了如何使用

localStorage

存储和读取简单的 JavaScript 对象。你可以根据自己的需求,修改这段代码,存储和读取其他类型的数据。

如何清理本地存储?

清理本地存储有多种方式。

最简单的方式是使用

localStorage.clear()

方法,它可以清空所有存储在

localStorage

中的数据。

localStorage.clear();

另一种方式是使用

localStorage.removeItem('key')

方法,它可以删除指定键名的数据。

localStorage.removeItem('userInfo');

还可以通过设置过期时间来自动清理本地存储的数据。但

localStorage

本身并不支持设置过期时间。你需要自己实现这个功能。一种常见的做法是,在存储数据时,同时存储一个时间戳,表示数据的过期时间。在读取数据时,先检查当前时间是否超过了过期时间,如果超过了,则删除数据。

function setItemWithExpiry(key, value, expiry) {  const now = new Date();  const item = {    value: value,    expiry: now.getTime() + expiry,  };  localStorage.setItem(key, JSON.stringify(item));}function getItemWithExpiry(key) {  const itemStr = localStorage.getItem(key);  if (!itemStr) {    return null;  }  const item = JSON.parse(itemStr);  const now = new Date();  if (now.getTime() > item.expiry) {    localStorage.removeItem(key);    return null;  }  return item.value;}// 示例用法:存储数据,过期时间为 1 小时setItemWithExpiry('myKey', 'myValue', 3600000);// 读取数据const myValue = getItemWithExpiry('myKey');if (myValue) {  console.log('Value:', myValue);} else {  console.log('Key not found or expired.');}

这段代码定义了两个函数:

setItemWithExpiry

getItemWithExpiry

setItemWithExpiry

函数用于存储数据,它接受键名、值和过期时间作为参数。它将值和过期时间存储在一个对象中,并将该对象转换为 JSON 字符串,然后存储在

localStorage

中。

getItemWithExpiry

函数用于读取数据,它从

localStorage

中读取数据,并检查是否已过期。如果已过期,则删除数据并返回

null

。否则,返回数据的值。

这个示例演示了如何使用过期时间来自动清理本地存储的数据。你可以根据自己的需求,修改这段代码,设置不同的过期时间。

如何处理跨域访问本地存储的问题?

由于浏览器的同源策略,不同域名的网站不能互相访问

localStorage

sessionStorage

中的数据。

如果需要在不同域名的网站之间共享数据,可以使用一些跨域通信技术,例如

postMessage

CORS

postMessage

是一种简单而强大的跨域通信机制。它允许一个窗口向另一个窗口发送消息,而不管它们的域名是否相同。

CORS

是一种更复杂的跨域通信机制。它需要在服务器端进行配置,允许指定的域名访问服务器的资源。

选择哪种跨域通信技术取决于你的需求。如果只需要在两个特定的域名之间共享数据,那么

postMessage

可能更简单。如果需要在多个域名之间共享数据,那么

CORS

可能更合适。

以上就是js 怎么实现本地存储的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/91258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月18日 16:19:12
下一篇 2025年11月18日 16:50:49

相关推荐

  • AO3镜像站备用镜像网址_AO3镜像站快速访问官网

    AO3镜像站备用网址包括ao3mirror.com和xiaozhan.icu,当主站archiveofourown.org无法访问时可切换使用,二者均同步更新内容并支持多语言检索与离线下载功能。 AO3镜像站备用镜像网址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来AO3镜像站快速访问官…

    2025年12月6日 软件教程
    200
  • 怎样用免费工具美化PPT_免费美化PPT的实用方法分享

    利用KIMI智能助手可免费将PPT美化为科技感风格,但需核对文字准确性;2. 天工AI擅长优化内容结构,提升逻辑性,适合高质量内容需求;3. SlidesAI支持语音输入与自动排版,操作便捷,利于紧急场景;4. Prezo提供多种模板,自动生成图文并茂幻灯片,适合学生与初创团队。 如果您有一份内容完…

    2025年12月6日 软件教程
    100
  • Pages怎么协作编辑同一文档 Pages多人实时协作的流程

    首先启用Pages共享功能,点击右上角共享按钮并选择“添加协作者”,设置为可编辑并生成链接;接着复制链接通过邮件或社交软件发送给成员,确保其使用Apple ID登录iCloud后即可加入编辑;也可直接在共享菜单中输入邮箱地址定向邀请,设定编辑权限后发送;最后在共享面板中管理协作者权限,查看实时在线状…

    2025年12月6日 软件教程
    200
  • jm漫画官方正版入口 jm漫画官方网站登录链接

    JM漫画作为一个致力于为广大漫画爱好者服务的全方位的数字漫画阅读平台,凭借其海量的资源储备、卓越的阅读体验和人性化的功能设计,在众多同类平台中脱颖而出。它不仅收录了来自世界各地的热门连载与经典完结作品,更通过智能推荐算法,精准地将符合用户口味的精彩内容呈现眼前,让每一位用户都能在这里找到属于自己的精…

    2025年12月6日 软件教程
    000
  • 怎么下载安装快手极速版_快手极速版下载安装详细教程

    1、优先通过华为应用市场搜索“快手极速版”,确认开发者为北京快手科技有限公司后安装;2、若应用商店无结果,可访问快手极速版官网下载APK文件,需手动开启浏览器的未知来源安装权限;3、也可选择豌豆荚、应用宝等可信第三方平台下载官方版本,核对安全标识后完成安装。 如果您尝试在手机上安装快手极速版,但无法…

    2025年12月6日 软件教程
    000
  • 哔哩哔哩的视频卡在加载中怎么办_哔哩哔哩视频加载卡顿解决方法

    视频加载停滞可先切换网络或重启路由器,再清除B站缓存并重装应用,接着调低播放清晰度并关闭自动选分辨率,随后更改播放策略为AVC编码,最后关闭硬件加速功能以恢复播放。 如果您尝试播放哔哩哔哩的视频,但进度条停滞在加载状态,无法继续播放,这通常是由于网络、应用缓存或播放设置等因素导致。以下是解决此问题的…

    2025年12月6日 软件教程
    000
  • REDMI K90系列正式发布,售价2599元起!

    10月23日,redmi k90系列正式亮相,推出redmi k90与redmi k90 pro max两款新机。其中,redmi k90搭载骁龙8至尊版处理器、7100mah大电池及100w有线快充等多项旗舰配置,起售价为2599元,官方称其为k系列迄今为止最完整的标准版本。 图源:REDMI红米…

    2025年12月6日 行业动态
    200
  • Linux中如何安装Nginx服务_Linux安装Nginx服务的完整指南

    首先更新系统软件包,然后通过对应包管理器安装Nginx,启动并启用服务,开放防火墙端口,最后验证欢迎页显示以确认安装成功。 在Linux系统中安装Nginx服务是搭建Web服务器的第一步。Nginx以高性能、低资源消耗和良好的并发处理能力著称,广泛用于静态内容服务、反向代理和负载均衡。以下是在主流L…

    2025年12月6日 运维
    000
  • Linux journalctl与systemctl status结合分析

    先看 systemctl status 确认服务状态,再用 journalctl 查看详细日志。例如 nginx 启动失败时,systemctl status 显示 Active: failed,journalctl -u nginx 发现端口 80 被占用,结合两者可快速定位问题根源。 在 Lin…

    2025年12月6日 运维
    100
  • 华为新机发布计划曝光:Pura 90系列或明年4月登场

    近日,有数码博主透露了华为2025年至2026年的新品规划,其中pura 90系列预计在2026年4月发布,有望成为华为新一代影像旗舰。根据路线图,华为将在2025年底至2026年陆续推出mate 80系列、折叠屏新机mate x7系列以及nova 15系列,而pura 90系列则将成为2026年上…

    2025年12月6日 行业动态
    100
  • TikTok视频无法下载怎么办 TikTok视频下载异常修复方法

    先检查链接格式、网络设置及工具版本。复制以https://www.tiktok.com/@或vm.tiktok.com开头的链接,删除?后参数,尝试短链接;确保网络畅通,可切换地区节点或关闭防火墙;更新工具至最新版,优先选用yt-dlp等持续维护的工具。 遇到TikTok视频下载不了的情况,别急着换…

    2025年12月6日 软件教程
    100
  • Linux如何优化系统性能_Linux系统性能优化的实用方法

    优化Linux性能需先监控资源使用,通过top、vmstat等命令分析负载,再调整内核参数如TCP优化与内存交换,结合关闭无用服务、选用合适文件系统与I/O调度器,持续按需调优以提升系统效率。 Linux系统性能优化的核心在于合理配置资源、监控系统状态并及时调整瓶颈环节。通过一系列实用手段,可以显著…

    2025年12月6日 运维
    000
  • jm漫画网页网址 jm漫画网页版进入 jm漫画网站网页版

    在广阔的数字漫画世界中,无数爱好者渴望寻得一个能够汇集海量作品、提供流畅阅读体验的综合性平台。这样的平台不仅是追更新、补旧番的乐园,更是连接创作者与读者的桥梁,让每一个精彩的故事都能被发现和分享。它以其丰富的资源和人性化的设计,成为了漫画迷们探索奇妙二次元世界的理想起点,满足了从热门大作到小众佳作的…

    2025年12月6日 软件教程
    000
  • 曝小米17 Air正在筹备 超薄机身+2亿像素+eSIM技术?

    近日,手机行业再度掀起超薄机型热潮,三星与苹果已相继推出s25 edge与iphone air等轻薄旗舰,引发市场高度关注。在此趋势下,多家国产厂商被曝正积极布局相关技术,加速抢占这一细分赛道。据业内人士消息,小米的超薄旗舰机型小米17 air已进入筹备阶段。 小米17 Pro 爆料显示,小米正在评…

    2025年12月6日 行业动态
    000
  • 「世纪传奇刀片新篇」飞利浦影音双11声宴开启

    百年声学基因碰撞前沿科技,一场有关声音美学与设计美学的影音狂欢已悄然引爆2025“双十一”! 当绝大多数影音数码品牌还在价格战中挣扎时,飞利浦影音已然开启了一场跨越百年的“声”活革命。作为拥有深厚技术底蕴的音频巨头,飞利浦影音及配件此次“双十一”精准聚焦“传承经典”与“设计美学”两大核心,为热爱生活…

    2025年12月6日 行业动态
    000
  • 荣耀手表5Pro 10月23日正式开启首销国补优惠价1359.2元起售

    荣耀手表5pro自9月25日开启全渠道预售以来,市场热度持续攀升,上市初期便迎来抢购热潮,一度出现全线售罄、供不应求的局面。10月23日,荣耀手表5pro正式迎来首销,提供蓝牙版与esim版两种选择。其中,蓝牙版本的攀登者(橙色)、开拓者(黑色)和远航者(灰色)首销期间享受国补优惠价,到手价为135…

    2025年12月6日 行业动态
    000
  • JavaScript动态生成日历式水平日期布局的优化实践

    本教程将指导如何使用javascript高效、正确地动态生成html表格中的日历式水平日期布局。重点解决直接操作`innerhtml`时遇到的标签闭合问题,通过数组构建html字符串来避免浏览器解析错误,并利用事件委托机制优化动态生成元素的事件处理,确保生成结构清晰、功能完善的日期展示。 在前端开发…

    2025年12月6日 web前端
    000
  • 环境搭建docker环境下如何快速部署mysql集群

    使用Docker Compose部署MySQL主从集群,通过配置文件设置server-id和binlog,编写docker-compose.yml定义主从服务并组网,启动后创建复制用户并配置主从连接,最后验证数据同步是否正常。 在Docker环境下快速部署MySQL集群,关键在于合理使用Docker…

    2025年12月6日 数据库
    000
  • Linux文件系统rsync命令详解

    rsync通过增量同步高效复制文件,支持本地及远程同步,常用选项包括-a、-v、-z和–delete,结合SSH可安全传输数据,配合cron可实现定时备份。 rsync 是 Linux 系统中一个非常强大且常用的文件同步工具,能够高效地在本地或远程系统之间复制和同步文件与目录。它以“增量…

    2025年12月6日 运维
    000
  • 微信如何开启翻译功能_微信翻译功能的语言切换

    首先开启微信翻译功能,长按外文消息选择翻译并设置“始终翻译此人消息”;接着在“我-设置-通用-多语言”中切换目标语言以优化翻译方向;若效果不佳,可复制内容至第三方工具如Google翻译进行高精度处理。 如果您在使用微信与不同语言的联系人沟通时,发现聊天内容无法理解,则可能是未开启微信内置的翻译功能或…

    2025年12月6日 软件教程
    000

发表回复

登录后才能评论
关注微信