通过Web应用程序在客户端存储用户首选项的标准方法

Gre*_*egg 3 javascript client-server preferences

我意识到这可能不适合SO,所以如果是这样的话,请告诉我应该在哪里移动/发布.

我的想法是在用户登录系统后,以cookie的形式将用户首选项存储在客户端上.如果用户修改了所述首选项,请更新cookie.我需要这样做,因为一些偏好是与客户端相关的,需要通过JavaScript查看.

我意识到我也需要存储在服务器上的偏好.只是想知道是否将它们拉入饼干是一个好主意.我的应用程序主要是ajax驱动,因此我想将首选项拉下来并存储它们.我不想用每个服务器请求推送它们.

我想避免像本地存储这样的东西,这样我就不必担心浏览器了.Cookie似乎得到所有浏览器的大力支持.

有人同意或有更好的方法吗?

jfr*_*d00 5

编辑现在你已经改变了我们第一次写答案时的问题:

如果您将偏好数据存储在服务器上,那么没有理由在访问之间将偏好数据保留在本地用户的计算机上因此没有理由将数据放入cookie中,因为它只会增加每个客户端的大小/服务器往返并且必须在客户端计算机上存储.

相反,我建议您只需在页面的javascript中放置一个首选项对象,如下所示:

var userPref = {theme: "fun", permitContact: false, lastDisplay: "threaded"};
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过javascript从任何页面访问首选项值,代码如下:

if (userPref.lastDisplay == "threaded") {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

编辑问题之前的旧答案:

如果您希望客户端首选项在客户端可能使用的不同浏览器中运行,则应将首选项存储在服务器上(强烈推荐).您可以随时在网页中使用它们,只需在每个页面中包含少量javascript,将首选项对象的属性设置为用户首选项的值.然后,您可以拥有一个首选项页面,用户可以在其中修改/更新首选项,并将新更改的首选项重新存储在服务器上.

Cookie适用于暂时状态,可以随时清除,并且只能在该特定计算机上运行.另外,如果您使用cookie并且如果userA注销并且userB在同一台计算机上登录,则userB的首选项将是错误的.


Mar*_*ota 2

一般来说,只要您不必存储大量数据,cookie 是一个好主意。使用 cookie 存储内容时需要记住以下几点:

  • 用户可以手动编辑首选项,因此请确保您没有进行is_root=false额外的服务器端检查之类的事情。

  • 当用户删除 cookie 并且首选项消失时,这可能会很烦人,我会选择镜像到 cookie 的服务器端首选项存储,以便 JavaScript 可以使用它们。

另一种可能性是使用内联首选项来提供动态 JavaScript,而不是静态文件 - 您可以像提供动态 HTML 一样提供 JavaScript,但是您必须小心缓存。