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

时间:2015-01-06 19:07:36

标签: angularjs cookies session-cookies cookiestore angular-cookies

我有一个应用程序,其中我有一个数组(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的东西搞定,它运行正常。

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

1 个答案:

答案 0 :(得分:1)

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

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

摘自第二个链接

  

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

     

这意味着如果你正在写一个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字节的coookies
  •   

您可以转到此link并点击

来测试浏览器Cookie大小限制
  

运行当前浏览器的测试

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

如果您想仅保留该会话的数据,请使用 sessionStorage ,否则请使用 localStorage 。阅读有关sessionStorage和localStorage here

的更多信息