奇怪的sessionStorage行为

时间:2012-12-15 16:21:30

标签: javascript html5 sessionstorage

好的,请耐心等待,我会尽量详细解释这个问题。

我有3个HTML(和适当的.js)文件。 我可以向sessionStorage添加内容,当我位于任一HTML文件中时,我会显示sessionStorage的内容。 我在最新版本的firefox上本地运行文件,据我所知,它支持file://中的sessionStorage 所以,一切都很好,我可以在HTML1中添加东西到sessionStorage并转到HTML2,数据显示正常。我得到了sessionStorage的概念,一切都很好。

但是这里变得奇怪: 当我在HTML1中向sessionStorage添加内容并通过a-href转到HTML2时,sessionStorage的内容就在那里。但是,如果我在网址栏中单击并按Enter键,则内容将丢失。 SessionStorage为“null”。我回到HTML1并按ctrl + r(重新加载)仍然是null。但是当我点击url栏然后按回车键(当我在HTML1页面时),sessionStorage内容会返回。

我已经完成了几项检查,看起来好像当我点击url栏并按回车键时,会创建另一个sessionStorage实例。

但是,如果我在某个服务器上传项目,则不会发生这种情况。 我想知道为什么 - 如果firefox支持sessionStorage - 当我在本地运行应用程序并且那里真正发生了什么时,会发生这种情况? 谢谢你的任何解释。

2 个答案:

答案 0 :(得分:2)

我很确定如果您查看文件系统中的文件,浏览器会将每个文件视为域。所以没有Ajax,没有共享cookie,会话等等。我觉得奇怪的是你要保留一些会话......

想象一下,你有一个愚蠢的用户打开他下载的html文件,没有这些保护,html文件可以看到系统上的所有内容。当打开.exe(或等效文件)时,防病毒软件和操作系统会警告您,打开.html文件时不会收到任何警告。

你必须使用本地服务器,比如WAMP。或者如果可以的话就是Apache。

答案 1 :(得分:2)

好的,它在本地不起作用,因为你打开文件,你需要在服务器上运行它。

浏览器会使用URL(当然还有其他内部内容)将会话绑定在一起,这就是为什么它适用于您上传到的任何服务器。这不适用于文件URL,因为浏览器将它们视为来自不同位置的不同页面,因此会话不会被共享。

如果您在本地设置WAMP或其他内容并通过它运行,它将起作用。这正是xavierm02所建议的。