HTML5会话存储发送到服务器

时间:2013-05-28 12:31:39

标签: javascript html5 session-storage

如果我是对的,会话存储存储在客户端,只能访问一个选项卡。

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

由于

2 个答案:

答案 0 :(得分:10)

可以从打开相同页面的所有选项卡中获取Storage对象(localStorage和sessionStorage)。

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

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

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

  

通过克隆创建新的顶级浏览上下文时   现有的浏览上下文,新的浏览上下文必须以   与原来相同的会话存储区域,但两组必须   从那时起被认为是分开的,不会相互影响   无论如何。 [...]当setItem(),removeItem()和clear()方法时   在与会话关联的存储对象x上​​调用   存储区[...],然后为每个Window对象的Window对象   object的sessionStorage属性的Storage对象与之关联   相同的存储区域(x除外)发送存储通知

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

使用event阅读keynewValue字段,以更新当前无效标签中的localSession(那里)也是事件的oldValuestorageArea包含受影响的Storage对象(如果同时使用本地存储和会话存储,则非常有用)。

对于“一个域” - 是的,相同的数据只能用于相同的(方案,域和端口)。

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

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

然后将其作为表单,网址或ajax的一部分发送。

答案 1 :(得分:0)

sessionStorage可用于1个域,而不是1个选项卡。因此,您可以在一个选项卡中设置页面上的信息,然后在第二个选项卡中将其读出。抱歉,我认为它的工作原理如下。但它没有,你需要localStorage或cookies来实现这一点。

因此将其存储在cookie中是一个可行的选择,但如果你这样做,为什么你甚至使用sessionStorage?

你也可以通过Ajax将sessionStorage的内容发送到服务器,(因为你只能发送字符串,你必须将数据转换为json)

但是如果你在服务器上保存信息,为什么还要使用sessionStorage? localStorage和sessionStorage的重点是保存服务器不必了解的用户特定信息。