sessionStorage在Android上意外清理

时间:2016-04-16 02:50:40

标签: javascript android mobile web session-storage

我有一个网站,它将字符串化的JavaScript对象保存到sessionStorage中。它适用于桌面浏览器 - 按照MDN上的描述,数据可以在页面重新加载时存活。

在Android手机上,当用户从另一个标签切换回来或当浏览器从后台返回到前台时,重新加载标签的情况并不少见,我希望sessionStorage会持续存在。然而,情况似乎并非如此。 sessionStorage不见了,就好像创建了一个新会话一样。

我想过使用localStorage,即使会话关闭也不会过期。它并没有真正解决我的所有问题 - 因为我希望用户可以在多个选项卡上多次打开它,并在每个选项卡上执行不同的操作。

所以我的问题是:

  1. 上面描述的sessionStorage行为是否符合预期?如果没有,我该怎么做才能纠正它?
  2. 如果行为符合预期,我必须依赖localStorage,如何识别为每个标签存储的对象?
  3. 提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

正如其他人评论的那样,SessionStorage 是临时设计的。移动浏览器生命周期非常注重减少资源使用,并且更积极地拆除标签页。

要解决此问题,您可以将随机选项卡 ID 推送到 URL,然后使用此 ID 作为所有 LocalStorage 键的前缀。刷新选项卡时,您只需从 URL 读取选项卡 ID 并使用它来访问 LocalStorage 中的数据。

LocalStorage 有一个非常简单的 API,因此您可以编写一个包装器,将键前缀从其他代码中隐藏起来。

答案 1 :(得分:0)

是的,这就是sessionStorage的工作方式。行为是预期的。

sessionStorage每个标签都是唯一的。如果用户关闭选项卡,则会删除sessionStorage。也就是说,只要用户停留在选项卡上,就会保存会话存储。

您在localStorage中存储的内容会一直存在,直到明确删除为止。所做的更改将保存并可用于该网站的所有当前和未来访问。

所以,是的,最好使用localStorage并在会话结束时将其清除。