$cookieStore 不为方法的另一次迭代保存数据

$cookieStore not saving the data for another iteration of a method

我有一个应用程序,其中我有数组 (configurationsArray) 中每个项目 (configurations) 的复选框。我想要实现的是在选中复选框时将配置添加到 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 中的东西并且它工作正常。

然而,当另一个复选框被选中并再次执行该方法时,我看到一开始返回的值有一个空数组。我在这里做错了什么?非常感谢任何指点。

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

详细了解 cookie 大小限制 here & here

第二个节选link

According to the RFC 2109, web cookies should not be limited by user agents. But the minimum capabilities of a browser or user agent should be at least 4096 bytes per cookie. This limit is applied to the name=value portion of the cookie only.

This means that if you're writing a cookie and the cookie is less than 4096 bytes, then it will be supported by every browser and user agent that conforms to the RFC.

Cookie Size limits for various browsers

  • Internet Explorer 8 allowed cookies up to 4095 bytes
  • Chrome 9 allowed cookies up to 4096 bytes
  • Opera 11 allowed cookies up to 4096 bytes
  • Firefox 3.6.3 allowed cookies up to 4097 bytes
  • Safari 5 allowed coookies up to 4097 bytes

您可以转到此 link 并单击

来测试您的浏览器 cookie 大小限制

Run Tests For Current Browser

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

如果您只想保留该会话的数据,请使用 sessionStorage,否则请使用 localStorage。详细了解 sessionStorage 和 localStorage here