Angular $cookieStore не сохраняет обновленный файл cookie при обновлении

У меня возникают проблемы с сохранением $cookieStore значения файла cookie после его обновления. Вот два метода UserService, которые имеют дело с файлом cookie:

var getCurrentUser = function () {
    return $cookieStore.get('currentUser');
};

var updateCurrentUser = function () {
    return $http.get(baseUrl + 'api/session').then(function (response) {
        $cookieStore.put('currentUser', response.data);
        $rootScope.$broadcast('currentUser', response.data);
    }, function (response) {
        $cookieStore.remove('currentUser');
        $rootScope.$broadcast('currentUser', null);
    });
};

В моем приложении после выполнения действия, которое повлияет на метаданные текущего пользователя, я вызываю UserService.updateCurrentUser(), который извлекает последние пользовательские данные с сервера и обновляет этот файл cookie. Затем в местах, отображающих пользовательские данные, у меня есть следующий код, который будет обновлять пользовательскую модель в этом конкретном контроллере:

$scope.$on('currentUser', function (event, data) {
    $scope.user = data;
});

Когда я прохожу код, кажется, что все работает правильно. После запуска строки $cookieStore.put('currentUser', response.data); обновленное значение можно подтвердить, проверив $cookieStore.get('currentUser'). Однако, когда я проверяю фактический файл cookie с помощью инструмента браузера, значение файла cookie не обновляется. Я не уверен, что инструмент браузера требует обновления для отображения новых данных. Но когда я обновляю страницу, обновленное значение файла cookie также нигде не видно. Что происходит?

Заранее спасибо.


person im1dermike    schedule 11.05.2015    source источник
comment
Ознакомьтесь с документацией по put(...) - есть третий аргумент с дополнительными параметрами, в том числе срок действия файла cookie. В противном случае срок его действия истечет при обновлении. Также служба теперь называется $cookies, я не уверен, какую версию angular вы используете, но я предполагаю, что она достаточно похожа для работы с документами: docs.angularjs.org/api/ngCookies/service/$cookies   -  person David Spence    schedule 11.05.2015
comment
@DavidSpence: Спасибо! Мне пришлось заменить angular 1.3.15 на 1.4.0, чтобы получить функциональность файлов cookie, описанную в этом документе. Теперь я могу установить срок действия, хотя текущая проблема заключается в уменьшении размера файла cookie до менее 4 КБ...   -  person im1dermike    schedule 11.05.2015
comment
Сладкий! Добавление ответа для милых, милых точек доступа в Интернет.   -  person David Spence    schedule 11.05.2015


Ответы (1)


Ознакомьтесь с документацией по добавлению файла cookie с помощью службы $cookie:

put(key, value, [options]);

Третий аргумент разрешает дополнительные параметры:

  • путь (строка)
  • домен (строка)
  • истекает (дата)
  • безопасный (логический)

Вы должны установить expires, чтобы определить, когда должен истечь срок действия файла cookie, иначе срок действия файла cookie истечет, когда вы обновите или покинете сайт.

$cookies.put("id", 1, {
    expires: new Date(2016, 1, 1)
});

Также услуга теперь называется $cookies. Начиная с Angular 1.4 теперь вы можете установить срок действия. До тех пор это было невозможно.

http://docs.angularjs.org/api/ngCookies/service/$cookies< /а>

person David Spence    schedule 11.05.2015