首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

令牌(‘localStorage.getItem’)的行为很奇怪

基础概念

localStorage.getItem 是 Web Storage API 的一部分,用于从浏览器的本地存储中获取数据。本地存储是一种持久化的存储方式,数据不会随着页面会话结束而消失。

行为描述

localStorage.getItem 的行为可能会让人觉得奇怪,主要原因包括:

  1. 数据类型localStorage 只能存储字符串类型的数据。如果你尝试存储其他类型的数据(如对象或数组),它们会被自动转换为字符串。
  2. 存储限制:每个域名下的 localStorage 存储空间有限制,通常为 5MB 左右。
  3. 跨域问题:不同域名之间的 localStorage 是隔离的,无法互相访问。
  4. 安全性localStorage 中的数据容易受到 XSS(跨站脚本攻击)的影响,因此存储敏感数据时需要格外小心。

相关优势

  1. 持久化存储:数据不会随着页面会话结束而消失。
  2. 跨页面共享:同一域名下的所有页面可以共享 localStorage 中的数据。
  3. 简单易用:API 简单,易于使用。

类型

localStorage 主要有两种操作:

  1. getItem:获取存储的数据。
  2. getItem:获取存储的数据。
  3. setItem:存储数据。
  4. setItem:存储数据。

应用场景

  1. 用户偏好设置:存储用户的偏好设置,如主题颜色、字体大小等。
  2. 缓存数据:缓存一些不经常变化的数据,减少网络请求。
  3. 会话状态:在用户关闭浏览器后仍然保留某些状态。

常见问题及解决方法

问题1:为什么 localStorage.getItem 返回 null

原因

  • 数据不存在。
  • 存储空间不足。
  • 浏览器不支持 localStorage

解决方法

代码语言:txt
复制
const value = localStorage.getItem('key');
if (value === null) {
  console.log('数据不存在或存储空间不足');
}

问题2:为什么 localStorage.setItem 抛出异常?

原因

  • 存储空间不足。
  • 数据类型不正确(非字符串)。

解决方法

代码语言:txt
复制
try {
  localStorage.setItem('key', JSON.stringify(value));
} catch (e) {
  console.error('存储空间不足或数据类型不正确', e);
}

问题3:如何安全地存储敏感数据?

解决方法

  • 使用加密算法对数据进行加密。
  • 使用 sessionStorage 代替 localStorage,因为 sessionStorage 的数据仅在当前会话中有效,关闭浏览器后数据会被清除。

示例代码

代码语言:txt
复制
// 存储数据
localStorage.setItem('username', 'JohnDoe');

// 获取数据
const username = localStorage.getItem('username');
console.log(username); // 输出: JohnDoe

// 删除数据
localStorage.removeItem('username');

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

参考链接

希望这些信息能帮助你更好地理解 localStorage.getItem 的行为及其相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

delete奇怪行为

delete奇怪行为分为2部分: // 1.delete用defineProperty定义属性报错 // Uncaught TypeError: Cannot delete property 'value...但规则是这样,所以奇怪行为1是合理 占位初始值 猜测如果属性已经存在了,defineProperty()会收敛一些,考虑一下原descriptor感受: var obj = {}; obj.value...环境(比如onclick属性值执行环境,函数调用创建执行环境)和eval环境(eval传入代码执行环境) 变量对象/活动对象 每个执行环境都对应一个变量对象,源码里声明变量和函数都作为变量对象属性存在...) P.S.变量对象与活动对象这种“玄幻”东西没必要太较真,各是什么有什么关系都不重要,理解其作用就好 eval环境特殊性 eval执行环境中声明属性和函数将作为调用环境(也就是上一层执行环境)变量对象属性存在...,能不能删可能只是configurable一部分) 遵循规则是:通过声明创建变量和函数带有一个不能删天赋,而通过显式或者隐式属性赋值创建变量和函数没有这个天赋 内置一些对象属性也带有不能删天赋

2.3K30

taskscheduler java_java – taskScheduler池奇怪行为「建议收藏」

我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一应用程序,其中包含用于处理警报部分代码,而应用程序B是一个仅处理警报新专用应用程序.这里目标是打破小应用程序中...threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); threadPoolTaskScheduler.setPoolSize(100); return threadPoolTaskScheduler; } } 昨天,我经历了一个奇怪行为...已检测到警报并将其发送到新应用B – >好 >应用程序B收到警报并开始根据taskScheduler处理它 – >好 >第一步已由应用程序B处理 – >好 >第二步已由应用程序A处理 – > NOK,奇怪行为...对我来说,每个taskScheduler都附加到创建它应用程序.我哪里错了?...UPDATE 我有一个发出警报真实盒子.这些警报必须由新应用程序处理.但我还有旧盒子没有迁移到新系统.所以我在两个不同项目中有处理代码.

1.8K10
  • 记录 git 一个奇怪错误,以及最近心态调整

    git 一个奇怪错误 ACMOI_Journey on  master [⇡] via ?...failure) error: failed to push some refs to 'github.com:PiperLiu/ACMOI_Journey.git' 刚才进行了很多次提交,遇到了如上奇怪错误...remote rejected 常见,哪里『奇怪』呢? 以往, git 都会跟我们讲为什么 reject ,其中大多以 hint: 形式输出,提示我们比如本地与远程不同步等问题。...好处是三个任务对接领导为人都很好,也不是 push 。...有时候(比如刚才)确实心情陷入烦躁,诸多因素混合在一起: 学习计划没有如期进行,心里着急 神奇 bug ,比如 git 那个 由于机器性能引起问题,我束手无策 值得一提是,除了我自己,没人知道我烦躁

    87740

    发现一个奇怪现象,MyBaits insert方法一直返回-2147482646

    前几天在做项目demo时候,发现有一个奇怪现象,就是MyBatis发现更新和插入返回值一直为"-2147482646",无论怎么改,这个值一直不变...... 这么一改果然好使,但是为啥会返回这个奇怪数字呢...千呼万唤始出来,这个奇怪数字原来在这里出来,其中可以看到它是固定返回,没有任何判断逻辑...这样就证明了一点,只要你insert方法在配置文件中配置是batch,那么它肯定返回这个值!...总结 本篇博客记录了一次源码追踪过程,从而解释了为什么配置BATCH返回是这个数字原因,在实际编程中,可能会遇到很多奇怪问题,这时候就要敢于翻源码,答案一定在源码中,才能从根本上知道产生问题原因...Java是目前应用非常广泛软件开发平台,学习针对Java程序优化方法有重要现实意义。

    53720

    前端数据存储探秘:Cookie、LocalStorage与SessionStorage实用指南

    设置 SameSite 属性:控制 Cookie 在跨站请求中发送行为,防止 CSRF 攻击。...解决方案:避免存储敏感数据:不要在 LocalStorage 中存储敏感信息,如用户密码、令牌等。数据加密:对存储数据进行加密,增加数据安全性。...使用示例:// 设置 LocalStoragelocalStorage.setItem('username', 'John Doe');// 读取 LocalStorageconst username = localStorage.getItem...解决方案:避免存储敏感数据:不要在 SessionStorage 中存储敏感信息,如用户密码、令牌等。数据加密:对存储数据进行加密,增加数据安全性。...secretKey);localStorage.setItem('username', encryptedUsername);// 读取并解密数据const storedEncryptedUsername = localStorage.getItem

    11310

    构建Vue项目-身份验证

    现在,从API提取更多数据应该容易-只需在服务内部创建一个新 .service.js,编写辅助方法并通过我们制作ApiService访问API。...这样,如果您需要在其他组件中显示或操作相同数据,将来便可以重用逻辑。 补充:如何刷新过期访问令牌? 关于身份验证,要处理令牌刷新或401错误(token失效)比较困难,因此被许多教程所忽略。...如果是,则我们正在检查401是否在令牌刷新调用本身上发生(我们不想陷入循环中) 永久刷新令牌!)。然后,代码将刷新令牌并重试失败请求,并将响应返回给调用方。...如果访问令牌到期,所有请求将失败,并因此触发401拦截器中令牌刷新。从长远来看,这将刷新每个请求令牌,这样不太好。...通过保存刷新令牌promise,并向每个刷新令牌请求返回相同promise,我们可以确保令牌仅刷新一次。 您还需要在设置请求header之后立即在main.js中安装401拦截器。

    7.1K20

    Haytham个人博客开发日志 -- Flask+Vue基于token登录状态与路由管理

    后端:以上服务需要视图函数,配置跨域,令牌管理与验证,数据库管理。...出于记录分享目的,将实现登录状态管理代码整理如下 实现思路 要实现基于令牌登录状态管理,其思路大致如下 前端将帐号密码提交后台 后台验证,通过这返回token 前端在每次请求前将token设置到请求头当中...token axios.interceptors.request.use( config => { let token = localStorage.getItem('Authorization'...content=json['content']) db.session.add(newpost) db.session.commit() return "200 OK" 备注 以上部分即是实现基于令牌管理代码核心部分...to.meta.isLogin){ next() }else{ let token = localStorage.getItem('Authorization'); if(token ==

    1.8K00

    1500+ HuggingFace API token暴露,使数百万 Meta-Llama、Bloom 等大模型用户面临风险

    在这项研究中,我们发现了数以千计 API 令牌,这些令牌暴露给恶意行为者,使数百万最终用户可能受到攻击。...为了克服这个障碍,我们必须使令牌前缀更长,因此我们暴力执行令牌前两个字母,以减少每个请求响应,从而获得对所有可用结果访问。     在HuggingFace中,这种行为更难扫描。...但这还不是全部,当我们搜索一个示例子字符串:“hf_aa”时,我们收到文本不包含所有子字符串,而是以 hf_axxxxx 或 hf_xaxxxxx 开头文本。(奇怪吧?!    ...——这一结果使组织容易受到恶意行为潜在利用。    ...在发现漏洞后,我们已联系并通知了所有用户和组织,并要求做出回应以缓解违规行为,因为我们致力于用户安全和模型安全,并建议他们撤销其公开令牌并从其存储库中删除令牌

    10510

    WebSocket教程:JWT身份验证参数方式有哪些?

    这个令牌包含了用户身份信息和一些额外声明(如角色、权限等),并且被服务器密钥签名。 发送JWT:服务器将JWT发送回客户端。...在连接URL中,通过查询参数方式附加JWT令牌。例如:ws://wss.tinywan.com/socket?...服务器验证JWT:服务器接收到WebSocket连接请求后,解析URL中令牌参数,并验证JWT有效性。这包括检查签名、过期时间以及任何其他服务器关心声明。...请注意,JWT令牌应该始终通过安全方式传递,比如使用 wss://(WebSocket Secure,即WebSocket协议加密版本)来避免中间人攻击。...const access_token = localStorage.getItem('access_token'); var ws = new WebSocket("ws://wss.tinywan.com

    57110

    Flask 学习-31.flask_jwt_extended 验证token四种方

    您需要做就是在登录时存储令牌,并在每次向受保护路由发出请求时将令牌添加为标头。注销就像删除令牌一样简单。...双重提交验证背后基本思想是,仅当请求中还存在特殊双重提交令牌时,来自 cookie JWT 才会被认为是有效,并且双重提交令牌不能是由 Web 浏览器自动发送东西(即它不能是另一个cookie...第一个 cookie 包含 JWT,并且在该 JWT 中编码是双重提交令牌。...我们设置第二个 cookie 仅包含相同双重提交令牌,但这次是在 javascript 可读 cookie 中。...因为双重提交令牌需要作为标头出现(不会在请求中自动发送),并且在不同域上运行一些恶意 javascript 将无法读取您网站上包含双重提交令牌 cookie,我们已成功阻止任何 CSRF 攻击。

    2.3K40

    TabTransformer:用于表格数据Transformer

    transformer最初是作为一种建模语言方法被提出。那么,表格数据是一种语言吗?把普通表格和人类语言进行比较感觉奇怪。 事实是,统计模型并不关心我们感觉。...事实证明,这些限制并没有限制Transformers使用。事实正好相反。 当令牌顺序不重要时,Transformers变得更加完美的。它甚至简化了模型。现在可以省去原始论文中位置编码步骤。...RNNs本身就使用令牌顺序性和位置。 下图显示了TabTransformer模型架构: ? 因此,我们都同意至少在表格数据上尝试Transformers是有意义。...一个特性值会影响另一个特性解释方式。 由于决策树具有连续决策制定过程,因此它可以自然地为这些交互行为建模。...与语言模型一样,您也可以通过屏蔽输入句子中标记并学习预测屏蔽标记来训练表格数据上transformers。 第二种是基于关于ELECTRA论文学习技术。这是“替换令牌检测”。

    1.6K41

    面试系列-3 限流场景实践

    奇怪哈,为啥突然转变画风了,之前一篇文章中提到 redis限流操作,并没有实际给小伙伴们演示以及场景使用演练。所以呢,既然有人私聊问我了,那么今天我们来聊一聊这个。...直接阻断;④ 若当前请求与第一个请求时间差大于1min且counter值小于等于100,则重置计数器归0(全网都是抄来抄去); 我个人理解是:我们限流操作除了针对大流量,那么还可以用来控制用户行为,避免产生垃圾请求...最常见发帖、点赞、回复评论这些行为都是要经过限流控制(针对个人用户行为)。不单单只是针对某一个接口所有用户集中请求。...恩,恩,你这里说还算清楚,有一些细节还不到位,有空可以自己查阅文档看看。不过总体来说,回答已经ok了。...你上面已经情况分析和使用流程原理已经清晰了。说白了都是差不多原理,只是让它会变得越来越紧凑,就是越来越完善。假如让你使用redis来做令牌桶,你有没有自己想法呢?

    70910

    JWT双令牌认证实现无感Token自动续约

    当使用公钥/私钥对对令牌进行签名时,该签名还证明只有持有私钥一方才是对其进行签名一方( 签名技术是保证传输信息不可抵赖,并不能保证信息传输安全 ) 官网地址:https://jwt.io JWT...以及access_token和refresh_token巧妙实效设置,达到双令牌刷新、续期。 AccessToken和RefreshToken 什么是 Access Token ?...这样显然体验不好,接下来实现用refresh_token来刷新获取新访问令牌access_token 通过调用刷新令牌refreshToken()方法来获取最新访问令牌access_token 刷新令牌伪代码参考...: Bearer 传值是refresh_token令牌,而不是access_token令牌....const res = await axios.get("http://127.0.0.1:8888/oauth/refresh-token", { params: { refresh_token: localStorage.getItem

    27020

    OAuth 详解 什么是OAuth 2.0 隐式流, 已经不推荐了吗?

    然而,一旦 JavaScript 应用程序获得了访问令牌,它仍然必须将它存储在某个地方才能使用它,并且无论应用程序使用隐式流还是 PKCE 来获取它,它存储访问令牌方式都是相同。...OAuth 交换和后端内部令牌管理,从不将其暴露给 JavaScript 前端,并避免在 JavaScript 中管理令牌所有固有风险。...您授权端点将是/v1/authorize附加 URI,令牌端点将以/v1/token....使用授权码获取访问令牌 此应用程序将需要验证该state值是否与它在开始时生成值相匹配,然后将授权代码交换为访问令牌。为此,我们需要添加更多辅助函数。...向令牌端点发送 POST 请求,其中包括code_verifier它在上一步中创建参数 更新 UI 以指示错误消息或显示返回访问令牌 使用会话历史管理 API 从地址栏中删除授权代码 此时,您已准备好试用该应用程序

    26340

    Dubbo 分布式架构搭建教育 PC 站 - 微信登录

    OAuth 在第三方应用与服务提供商之间设置了一个授权层,第三方应用通过授权层获取令牌,再通过令牌获取信息。...令牌与密码作用都可以进入系统,但是有三点差异: 1、令牌是短期,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。 2、令牌可以被数据所有者撤销,会立即失效。...3、令牌有权限范围,比如不能获取用户密码信息。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。 这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。...Authorization Code 授权临时凭证(例如:临时身份证) Access Token 接口调用凭证(例如:令牌) 微信扫描登录授权简述 用户 -> 使用微信扫码登录第三方应用 -> 微信登录服务地址回调函数...通过 code,去微信官方申请一个正式 token(令牌) String getTokenByCode_url = "https://api.weixin.qq.com/sns/oauth2

    1.1K10
    领券