javascript - HTML5 session 存储发送到服务器

标签 javascript html session-storage

如果我是对的, session 存储存储在客户端,并且只能通过一个选项卡访问。

如何将存储在 session 存储中的信息发送到服务器?我可以为此使用 cookie,但如果我打开 2 个选项卡,cookie 将被第二个选项卡重写。

谢谢

最佳答案

存储对象(包括 localStorage 和 sessionStorage)在打开相同页面的所有选项卡中可用。

但是(一些评论指出这是不正确的,但这是对文档的误解),当您打开一个新选项卡时,会在内部创建一个新的存储对象。这是第一个的克隆,因此当时的内容是相同的。

它们与那一点分开处理,但您可以通过收听storage event 来同步它们在您的代码中。

来自 http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute :(请注意,规范针对的是实现者)

When a new top-level browsing context is created by cloning an existing browsing context, the new browsing context must start with the same session storage areas as the original, but the two sets must from that point on be considered separate, not affecting each other in any way. [...] When the setItem(), removeItem(), and clear() methods are called on a Storage object x that is associated with a session storage area [...], then for every Document object whose Window object's sessionStorage attribute's Storage object is associated with the same storage area, other than x, send a storage notification.

也就是说,当在事件选项卡中修改存储时,storage 事件将发送到所有其他选项卡(对于同一来源) - 但不是事件选项卡,当然不需要,因为这是正在修改的。

使用 event读取 keynewValue 字段以更新当前 inactive 选项卡中的 localSession(有还有事件上的 oldValue)。 storageArea 包含受影响的存储对象(如果您同时使用本地和 session 存储,则很有用)。

至于“一个域”- 是的,相同的数据将仅可用于相同的来源(方案、域和端口)。

将数据发送到服务器是完全可能的。存储在存储( session 和本地)中的所有内容都存储为字符串。不过,我建议对其进行编码(JSON 不是 必需的,因为它已经存储为字符串)。使用 f.ex:

var dataForServer = encodeURIComponent(sessionStorage.getItem(myKey));

然后将其作为表单、url 或 ajax 的一部分发送。

关于javascript - HTML5 session 存储发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16792158/

相关文章:

JavaScript session 存储 : unexpected value change

javascript - Opencart - 产品描述中插入的图片是 http 而不是 https

html - 我的类 div 无法为我的文档设置样式。但是输入和标签是。我错过了什么?

javascript - React 只为点击的元素提供动画

html - 在image的 `w`中解释 `srcset`

html - 如何使第一个菜单链接看起来好像悬停在悬停另一个链接之前

html - HTML5 中的本地存储、 session 存储、网络存储、网络数据库和 cookie

javascript - 如何使用存储在 session 存储中的访问 token 通过 HttpClient 进行 Web api 调用?

javascript - SailsJS 未将数据传递到 View 模板

JavaScript 代码无法正常工作