【问题标题】:Weird sessionStorage behavior奇怪的 sessionStorage 行为
【发布时间】:2012-12-16 19:25:02
【问题描述】:

好的,请多多包涵,我会尽可能详细地解释这个问题。

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

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

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

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

【问题讨论】:

  • 当你说你在本地运行时,是通过本地服务器还是只是打开文件?

标签: javascript html sessionstorage


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    假设您有一个愚蠢的用户打开他下载的 html 文件,如果没有这些保护,该 html 文件可以看到系统上的所有内容。当您打开 .exe(或同等文件)时,防病毒软件和操作系统会向您发出警告,但在打开 .html 文件时您不会收到任何警告。

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

    【讨论】:

    • 我觉得有趣的是,firefox 应该通过本地文件支持 sessionStorage。
    • 是的,但是您误解了 sessionStorage 的工作方式,浏览器正在做正确的事情。
    • 如果在浏览这 4 个 HTML 文件时,每个 HTML 文件都有自己的 sessionStorage,我会完全理解一切。我会说,好的,每个文件都像一个域。但是不,只有当我单击 url 栏并按 Enter 时才会这样做。如果我 ctrl+R(重新加载页面),一切正常。我不明白那部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-07-20
    • 2010-10-03
    • 2021-07-12
    • 2013-10-04
    相关资源
    最近更新 更多