$cookieStore не сохраняет данные для следующей итерации метода

У меня есть приложение, где у меня есть флажки для каждого элемента (конфигурации) из массива (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 ответ

Решение

Одна из возможных причин поведения, которое вы наблюдаете, заключается в том, что размер вашего файла cookie превышает ограничение размера файла cookie для вашего браузера.

Узнайте больше об ограничениях размера файлов cookie здесь и здесь.

Выдержки из второй ссылки

Согласно RFC 2109, веб-куки не должны быть ограничены пользовательскими агентами. Но минимальные возможности браузера или пользовательского агента должны составлять не менее 4096 байт на файл cookie. Это ограничение применяется только к части имени = значения файла cookie.

Это означает, что если вы пишете cookie, а размер cookie меньше 4096 байт, то он будет поддерживаться каждым браузером и пользовательским агентом, который соответствует RFC.

Ограничения размера файлов cookie для различных браузеров

  • Internet Explorer 8 разрешил файлы cookie размером до 4095 байт
  • В Chrome 9 разрешено использование файлов cookie размером до 4096 байт
  • Opera 11 допускает файлы cookie размером до 4096 байт
  • Firefox 3.6.3 разрешает файлы cookie размером до 4097 байт
  • Safari 5 позволяет создавать файлы до 4097 байт

Вы можете проверить ограничение размера cookie вашего браузера, перейдя по этой ссылке и нажав

Выполнить тесты для текущего браузера

Так что, если это действительно так, то вам нужно уменьшить размер файлов cookie. Если вы не хотите этого делать и предполагаете, что разрабатываете для HTML5, есть другие простые способы решения этой проблемы.

Если вы хотите сохранить данные только для этого сеанса, используйте sessionStorage, иначе используйте localStorage. Узнайте больше о sessionStorage и localStorage здесь

Другие вопросы по тегам