1

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

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

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

我已经进行了几次检查,似乎当我在 url 栏中单击并按 Enter 时,会创建另一个 sessionStorage 实例。

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

4

2 回答 2

2

I'm quite sure that if you looks at files from the filesystem, browsers consider every single file like a domain. So no Ajax, no shared cookies, sessions etc. The thing I find weird is that you get to keep some sessions...

Imagine you have a user stupid enough to open an html file he downloaded, without those protections, that html file could see everything on the system. And as much as antiviruses and the OS warn you when you open a .exe (or equivalent), you won't get any kind of warning when opening a .html file.

You'll have to use a local server, something like WAMP probably. Or Apache if you can.

于 2012-12-15T17:24:22.013 回答
2

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

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

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

于 2012-12-16T11:25:02.757 回答