【问题标题】:Are cookies the only native cross-subdomain storage?cookie 是唯一的原生跨子域存储吗?
【发布时间】:2011-09-18 09:07:39
【问题描述】:

Cookie 非常棒,因为在 website.com 中写入的值可以在 www.website.com 中使用(www 被视为无 www 的 sudomain)。缺点是所有 cookie 值都与每个 HTTP 请求一起发送到服务器。所以我正在寻找一种本地存储机制,该机制可用于 Javascript,它可以跨子域工作并且不会传输到服务器。这样的机制存在吗? LocalStorage 不能跨子域工作,Flash Cookies 不能在 iPhone 上工作。

【问题讨论】:

  • 您需要多少存储空间?如果它不是很多,并且您使用的是 PRG 模式(POST、REDIRECT、GET),只需将您需要的数据保存到 GET 上的页面本身,然后从页面发布您需要的任何数据。
  • 你在寻找怎样的跨域?你需要支持哪些不支持LocalStorage的浏览器?
  • @Rovert Harvey:这是大量数据:偏好、登录状态、最近的活动。我只是讨厌向服务器查询非关键数据,所以我喜欢将其存储在本地。 /// @James Black:到目前为止,我只需要 wwwnon-www 共享相同的值。我认为当用户在 非 www 上做某事,然后转到 www 并发现他们的所有偏好都被清除时,这是一种糟糕的用户体验。我的目标是升级现代浏览器以停止使用 cookie,但在旧浏览器不支持这种新存储机制时回退到 cookie。这样我的服务器受到的影响就更少了
  • 我通常让服务器强制 non-wwwwww (反之亦然),所以这不会是一个问题。但是,对于其他场景,我可以看到跨子域访问本地存储的价值,所以这个问题仍然是一个有用的问题。

标签: javascript cookies local-storage


【解决方案1】:

也许只是将 website.com 重定向到 www.website.com,反之亦然? 这似乎是最简单的解决方法。 http://www.scriptalicious.com/blog/2009/04/redirecting-www-to-non-www-using-htaccess/

【讨论】:

【解决方案2】:

如果您的用户在您的服务器上拥有他们登录的实际帐户,那么您可以将信息存储在服务器端,并在需要该数据和适当数据的每个页面中包含一点 javascript。当您在服务器端呈现页面时,您可以在 javascript 中定义一个用户对象,并将适当的属性设置为可以在客户端引用的数据值。这样,您只需在给定页面中包含所需的数据,无论用户从哪台计算机登录,都可以获得相同的用户数据(不依赖于持久性 cookie)。如果只是偶尔需要较大的数据,并且您不希望将它们包含在页面中以防万一,则可以通过 ajax/json 使这些数据可查询,以便仅在需要时才可以检索它们。

如果您仍然打算仅将其存储在本地,那么 cookie 或 HTML5 本地存储是您唯一的选择,而 cookie 将是您唯一涵盖所有正在使用的浏览器的跨浏览器选项。在增加实现复杂性的同时,您可以结合一些建议:

  1. 始终重定向到 www.domain.com,以便所有用户活动都在同一个域上。
  2. 在可用时使用 HTML5 本地存储(步骤 1 中的重定向可防止子域锁定)。
  3. 当 HTML5 本地存储不可用时回退到 cookie 存储。

大概可以编写或找到 HTML5 本地存储和 cookie 的抽象,因此 99% 的代码可以独立于实际使用的存储机制。看起来有一些 jQuery 插件可以做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多