0

我有一个应用程序,其中我为数组(configurationsArray)中的每个项目(配置)设置了复选框。我要实现的是在选中复选框时将配置添加到 cookie 存储中

这是我的代码

    $scope.addProjectConfig = function(configuration, projectName) {
            var configs = $cookieStore.get('projectsToCompare');
            if(!configs) {
                $cookieStore.put('projectsToCompare', new Array());
                configs = $cookieStore.get('projectsToCompare');
            }

            if(configuration.addedToCompare) {
                var configObject = {projectName: projectName, configuration: configuration};
                configs.push(configObject);
                $cookieStore.put('projectsToCompare', configs);
            } 

            var configs1 = $cookieStore.get('projectsToCompare');
        };

如果你最后看到我尝试获取我推送到 cookieStore 中的东西,它工作正常。

但是,当检查另一个复选框并再次执行该方法时,我看到开头返回的值具有一个空数组。我在这里做错了什么?任何指针都非常感谢。

4

1 回答 1

1

您观察到的行为的一个可能原因是,您的 cookie 大小超过了浏览器的 cookie 大小限制。

在此处此处阅读有关 cookie 大小限制的更多信息。

第二个链接的节选

根据 RFC 2109,Web cookie 不应受到用户代理的限制。但是浏览器或用户代理的最低功能应该是每个 cookie 至少 4096 字节。此限制仅适用于 cookie 的 name=value 部分。

这意味着,如果您正在编写一个 cookie 并且 cookie 小于 4096 字节,那么每个符合 RFC 的浏览器和用户代理都会支持它。

各种浏览器的 Cookie 大小限制

  • Internet Explorer 8 允许最多 4095 字节的 cookie
  • Chrome 9 允许最多 4096 字节的 cookie
  • Opera 11 允许最多 4096 字节的 cookie
  • Firefox 3.6.3 允许最多 4097 字节的 cookie
  • Safari 5 允许最多 4097 字节的 cookie

您可以通过访问此链接并单击来测试您的浏览器 cookie 大小限制

为当前浏览器运行测试

因此,如果确实如此,那么您需要减小 cookie 的大小。如果您不想这样做,并且假设您正在为 HTML5 开发,还有其他简单的方法可以解决这个问题。

如果您只想为该会话保留数据,请使用sessionStorage否则使用localStorage在此处阅读有关 sessionStorage 和 localStorage的更多信息

于 2015-01-07T07:26:46.570 回答