Файлы cookie в формате AngularJS не сохраняются
У меня есть форма входа в систему с функцией имени пользователя. Все, что они делают, это установить флажок, и файл cookie сохраняется через:
$scope.toggleCookie = function()
{
//-- $scope.remember is the model for the checkbox
$cookieStore.put('remember', $scope.remember);
if (!$scope.remember) $cookieStore.remove('email');
}
Когда пользователь вернется на страницу входа в систему, сначала проверьте файл remember
cookie:
$scope.remember = ($cookieStore.get('remember') == null || $cookieStore.get('remember') == false) ? false : true;
Затем я проверяю, есть ли в файле email
cookie значение:
$scope.email = ($cookieStore.get('email') != null) ? $cookieStore.get('email') : '';
Теперь все вышеописанное работает нормально, я могу войти в него с проверкой, выйти, и я могу видеть свое имя пользователя в поле ввода. Если я сниму его, войдите в систему и выйдите из системы, имя пользователя исчезнет.
Я также вижу это на вкладке resources- > cookie в инструментах chrome dev.
Я могу обновить страницу и все еще, имя пользователя есть, когда отмечено.
Моя проблема заключается в том, что когда я закрываю хром, снова его открываю, все данные cookie исчезли. Почему это? У меня нет большого опыта работы с файлами cookie.
Ответы
Ответ 1
В Angular v1.4 вы можете наконец установить некоторые параметры для файлов cookie. Вот очень простой пример:
var now = new $window.Date(),
// this will set the expiration to 6 months
exp = new $window.Date(now.getFullYear(), now.getMonth()+6, now.getDate());
$cookies.put('yourCookie','blabla',{
expires: exp
});
var cookie = $cookies.get('yourCookie');
console.log(cookie); // logs 'blabla'
Если вы проверите свои файлы cookie после запуска этого кода, вы увидите, что срок действия будет установлен в файл cookie с именем yourCookie
.
Объект, переданный в качестве третьего параметра функции put
выше, позволяет также использовать другие параметры, такие как установка path
, domain
и secure
. Проверьте документы для обзора.
Ответ 2
Чтобы файл cookie сохранялся в сеансах браузера, необходимо установить дату истечения срока действия. К сожалению, это не похоже на поддержку angilejs $cookie. См. Это сообщение: AngularJS - Как установить дату истечения срока действия cookie в AngularJS
Ответ 3
Таким образом, это, по-видимому, истекает, вызывая проблему. Начиная с версии AngularJS 1.2.19, вы не можете установить срок годности через $cookie
или $cookieStore
.
Чтобы исправить это, вместо этого я использовал локальное хранилище. Я использовал этот модуль для легкого доступа к локальному хранилищу: https://github.com/grevory/angular-local-storage
Было довольно безболезненно меняться. Я изменил $cookieStore.get('remember');
на localStorageService.get('remember');
, так как вы можете видеть, что они разделяют имена методов. Вместо put
он add