如何存储用户偏好? Cookie变大了

时间:2010-05-04 05:31:26

标签: asp.net-mvc cookies preferences

我的应用程序(Asp.Net MVC)与用户界面(jQuery / js)进行了很好的交互。例如,设置各种搜索图表,在屏幕上移动小工具等等。我当然希望保留每个用户的所有数据。因此,可以从Dumaine的任何页面获得数据,用户将接受他的偏好。

现在我将所有数据都保存在一个cookie 中,因为每次用户更改某些内容时它似乎都不是对服务器的逻辑异步访问,而且很多事情都发生了。当用户从应用程序注销时我保存了cookie到数据库。

Q是如何将设置保存回数据库 - 从客户端到服务器。 因为我想记录很多相互作用。 示例scanrios:关闭小部件,移动小部件,调整菜单大小,排序columens .. 我想记录那些动作。如果我将为每个动作解雇ajax节省rutine 太麻烦了。也许我别无选择.. 也许我应该在一定的间隔秒内运行异步保存。

问题是Cookie变得非常大。认为这个巨大的cookie附加在每个服务器请求上的想法让我觉得我的态度是错误的。

另一个问题是cookie有大小限制。它与您的浏览器不同,但我肯定已接近边界 - 我的cookie很容易变成4kb

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:3)

在不知道您的代码的情况下,您是否考虑将用户首选项存储在/您的数据库中。可以使用包含各种设置列的UserPreference表。

如果您有“保存首选项”选项,可以通过AJAX / JSON更新它,或者只是在回发时更新它。

编辑1:在考虑之后,我认为有一个明确的“保存偏好”按钮将是有益和实用的。

在页面的某个位置,用户编辑生成cookie的内容,放置一个名为save的按钮,然后挂钩jQuery单击处理程序。单击时,构建CSV字符串或另一种存储首选项以便回发到服务器的方法,然后使用$.post将其发送回控制器中的操作方法。

在那里,将它以某种方式存储在数据库中(由您决定),然后返回带有success属性的JSON数组,以表示首选项存储是否成功。

加载页面时,从数据库中获取首选项并执行操作。

答案 1 :(得分:1)

另一个解决方案是将用户首选项存储到会话中并编写一些服务器端逻辑(如操作过滤器),这些逻辑将在每个页面上将这些首选项写为JSON编码字符串(在script标记中朝向末尾标记)使它们可用于客户端脚本。