2011-06-20 33 views
7

饼干是伟大的,因为网站.com编写的值可用于www.website.com(www被认为是no-www的sudomain)。缺点是所有的cookie值都与每个HTTP请求一起发送到服务器。所以我正在寻找本地可用于JavaScript的本地存储机制,该机制工作在跨子域,并且不会传输到服务器。这种机制是否存在?​​不支持跨子域,并且Flash Cookies在iPhone上不起作用。Cookie是唯一的本地跨子域存储吗?

+0

你需要多少存储空间?如果数量不多,并且您使用的是PRG模式(POST,REDIRECT,GET),只需将所需的数据保存到GET页面中,然后在页面上发布所需的任何数据即可。 –

+0

你是如何跨域的?你需要支持哪些浏览器不支持LocalStorage? –

+0

@Rovert Harvey:这是一个大量的数据:喜好,登录状态,最近的活动。我只是讨厌查询非关键数据的服务器,所以我喜欢将它存储在本地。 /// @James Black:到目前为止,我只需要** www **和**非www **来共享相同的值。当用户在**非www **上做某些事情时,我认为这是一种糟糕的用户体验,然后转到** www **并发现他们的所有偏好都被消除了。我的目标是升级现代浏览器以停止使用Cookie,但在旧浏览器不支持此新存储机制时回退到Cookie。这种方式我的服务器采取的冲击较少 – JoJo

回答

1

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

如果你还只在本地存储目的,然后饼干或HTML5本地存储是你唯一的选择和cookie将覆盖所有浏览器在使用中你唯一的跨浏览器选项。除了实施复杂性之外,您还可以结合以下建议:

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

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