Javascript 奇怪的会话存储行为

Javascript 奇怪的会话存储行为,javascript,html,sessionstorage,Javascript,Html,Sessionstorage,好的,请耐心听我说,我会尽量详细地解释这个问题 我有3个HTML(和相应的.js)文件。 我可以将内容添加到sessionStorage,当我位于任一HTML文件中时,我会显示sessionStorage的内容。 我在最新版本的firefox上本地运行文件,据我所知,firefox支持文件中的会话存储:/ 所以,一切都很好,我可以在HTML1中向sessionStorage添加内容,然后转到HTML2,数据会正确显示。我得到了sessionStorage的概念,一切都很好 但这里是它变得奇怪的地

好的,请耐心听我说,我会尽量详细地解释这个问题

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

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

我做了几次检查,当我在url栏中单击并按enter键时,似乎创建了另一个sessionStorage实例

但是,如果我将项目上载到某个服务器上,则不会发生这种情况。 我想知道为什么-如果firefox支持会话存储-当我在本地运行应用程序时会发生这种情况,以及那里到底发生了什么?
谢谢你的任何解释。

< P>我很确定,如果你查看文件系统中的文件,浏览器会把每一个文件都视为一个域。所以没有Ajax,没有共享cookies,会话等等。我觉得奇怪的是,你可以保留一些会话

假设你有一个愚蠢的用户打开他下载的html文件,如果没有这些保护,html文件可以看到系统上的一切。当你打开一个.exe(或等效文件)时,操作系统会警告你,而当你打开一个.html文件时,你不会得到任何警告


您将不得不使用本地服务器,比如WAMP。如果你查看文件系统中的文件,浏览器会把每一个文件都视为一个域。所以没有Ajax,没有共享cookies,会话等等。我觉得奇怪的是,你可以保留一些会话

假设你有一个愚蠢的用户打开他下载的html文件,如果没有这些保护,html文件可以看到系统上的一切。当你打开一个.exe(或等效文件)时,操作系统会警告你,而当你打开一个.html文件时,你不会得到任何警告


您将不得不使用本地服务器,比如WAMP。或者Apache,如果可以的话。

好的,它不能在本地工作,因为您正在打开文件,您需要在服务器上运行它

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


如果您在本地设置WAMP或其他东西并运行它,它就会工作。这正是xavierm02的建议。

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

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


如果您在本地设置WAMP或其他东西并运行它,它就会工作。这正是xavierm02的建议。

当你说你在本地运行东西时,是通过本地服务器还是仅仅打开文件?当你说你在本地运行东西时,是通过本地服务器还是你只是打开文件?我发现有趣的是firefox应该支持通过本地文件进行会话存储。是的,但你误解了会话存储的工作方式,浏览器做的是正确的。如果在浏览这4个HTML文件时,每个HTML文件都有自己的会话存储。我会说,好吧,每个文件都像一个域。但是没有,只有当我单击url栏并按enter键时才会这样做。如果我按ctrl+R(重新加载页面),一切正常。我不明白这一点。我发现有趣的是firefox应该支持通过本地文件进行会话存储。是的,但你误解了会话存储的工作方式,浏览器做的是正确的。如果在浏览这4个HTML文件时,每个HTML文件都有自己的会话存储。我会说,好吧,每个文件都像一个域。但是没有,只有当我单击url栏并按enter键时才会这样做。如果我按ctrl+R(重新加载页面),一切正常。我不明白那部分。