HTML5 本地存储与会话存储

IT技术 javascript html local-storage session-storage
2021-01-17 17:35:56

除了非持久性和仅限于当前窗口之外,会话存储相对于本地存储是否有任何好处(性能、数据访问等)?

6个回答

localStoragesessionStorage都扩展了Storage除了预期的“非持久性”之外,它们之间没有区别sessionStorage

也就是说,存储在的数据localStorage 一直存在,直到明确删除所做的更改将被保存并可供所有当前和未来的站点访问使用。

对于sessionStorage更改仅适用于每个选项卡。所做的更改将被保存并可用于该选项卡中的当前页面直到它关闭。一旦关闭,存储的数据将被删除。

如果你在http下的存储中保存了一些数据,你将无法在https上检索它
2021-03-13 17:35:56
有一个更广泛的讨论,你可能会发现这里有帮助:stackoverflow.com/questions/19867599/...
2021-03-26 17:35:56
我在 Chrome v41.x 上对此进行了测试,上面关于 https 的声明似乎不正确:localStorage 保留其存储的数据。
2021-04-01 17:35:56
SessionStorage 在页面重新加载和恢复后仍然存在,但打开新选项卡/窗口将启动新会话。
2021-04-07 17:35:56

唯一的区别是 localStorage 具有不同的到期时间,sessionStorage只能在创建它的窗口打开时访问。
localStorage一直持续到您删除它或用户删除它为止。
假设您想保存一个登录用户名和密码sessionStoragelocalStorage出于安全原因(即其他人稍后访问他们的帐户),您想使用它
但是,如果您想将用户的设置保存在他们的机器上,您可能需要localStorage. 总而言之:

localStorage- 长期使用。
sessionStorage- 当您需要存储更改或临时存储的东西时使用

可能有助于理解本地存储和会话存储之间差异的其他几点

  1. 本地存储和会话存储都限于文档来源,因此

    https://mydomain.com/
    http://mydomain.com/
    https://mydomain.com:8080/

    以上所有 URL不会共享相同的存储。(注意网页路径不影响网页存储)

  2. 即使在不同标签页中打开同一个源策略的文档,会话存储也是不同的,因此在两个不同标签页中打开的同一个网页不能共享同一个会话存储。

  3. 本地和会话存储也受浏览器供应商的限制所以IE保存的存储数据不能被Chrome或FF读取。

希望这可以帮助。

不,相同的 sessionStorage 在 http 和 https 之间共享,但 localStorage 不是。
2021-03-19 17:35:56
如果您首先在 https 源中设置 sessionStorage,它将在 http 中可用,但如果您在 http 中创建 sessionStore,则在 http 中将不可用
2021-03-23 17:35:56
@DanielWerner 是的,如果您在 http 中创建 sessionStore,则在 https 中将不可用。
2021-03-25 17:35:56
@Shahdat,您的意思是“那么在 https 中将不可用”(注意 s)?
2021-04-02 17:35:56

之间的主要区别localStoragesessionStoragesessionStorage为每个标签是唯一的。如果您关闭选项卡,则会sessionStorage被删除,localStorage不会。您也无法在选项卡之间进行通信:)

另一个细微的区别是,例如在 Safari (8.0.3) 上localStorage有 2551 k 个字符的限制,但sessionStorage无限的存储空间

在Chrome(V43)都localStoragesessionStorage被限制为5101个ķ字符(正常/无痕模式之间没有差别)

在 FirefoxlocalStoragesessionStorage都被限制为 5120 k 个字符(正常/私人模式之间没有区别)

速度没有任何区别:)

Mobile Safari 和 Mobile Chrome 也有问题,Private Mode Safari & Chrome 的最大空间为 0KB

@BasimKhajwal 那是 5MB。字节,而不是位。
2021-03-19 17:35:56
@Mukus,没有来源,我自己进行了测试,并且在 Private Mode Safari 中遇到了一个问题,因为它有 localStorage 但那里没有空间,而且由于 localStorage 存在,我的 polyfill 不会触发,但是脚本失败了,因为它无法存储任何东西。您也可以使用此工具进行测试 - dev-test.nemikor.com/web-storage/support-test
2021-03-24 17:35:56
@Zze 是的,1 个字符通常是 1 个字节,因此 500 万个字符是 5Mb 的存储空间。
2021-04-03 17:35:56
你能在你提到的内容中添加来源吗?
2021-04-03 17:35:56
限制为 5101 k 个字符?所以...... 510.1万个字符?
2021-04-05 17:35:56

sessionStorage与 相同localStorage,除了它只存储一个会话的数据,并且在用户关闭创建它的浏览器窗口时将被删除。

你是说选项卡而不是窗口吗?
2021-04-05 17:35:56