Как установить дату истечения срока действия cookie в AngularJS

  • Мы хотим сохранить информацию о пользовательской авторизации в cookie, которая не должна быть потеряна при обновлении (F5) браузера.

  • Мы хотим сохранить информацию авторизации в файле "постоянный файл cookie", если пользователь выбрал флажок "Запомнить меня" во время входа в систему.

Ответ 1

Это возможно в версии 1.4.0 angular с помощью модуля ngCookies:

https://docs.angularjs.org/api/ngCookies/service/$cookies

angular.module('cookiesExample', ['ngCookies'])
.controller('ExampleController', ['$cookies', function($cookies) {
  // Find tomorrow date.
  var expireDate = new Date();
  expireDate.setDate(expireDate.getDate() + 1);
  // Setting a cookie
  $cookies.put('myFavorite', 'oatmeal', {'expires': expireDate});
}]);

Ответ 2

Для 1.4: Как отмечено в комментарии здесь и других ниже, начиная с версии 1.4, поддержка Angular native cookie теперь позволяет редактировать файлы cookie:

Из-за 38fbe3ee $cookie больше не будет показывать свойства, которые представляют текущие значения cookie браузера. $cookie больше не опросов браузер для внесения изменений в файлы cookie и больше не копирует файлы cookie значения в объект $cookies.

Это было изменено, потому что опрос дорог и вызвал проблемы с файлами $cookie, которые не синхронизируются правильно с фактические значения cookie браузера (причина, по которой опрос был первоначально добавлено, чтобы разрешить общение между различными вкладками, но есть лучшие способы сделать это сегодня, например localStorage.)

Новый API для $cookie выглядит следующим образом:

get put getObject putObject getAll remove Вы должны явно использовать выше, чтобы получить доступ к файлам cookie. Это также означает, что вы больше не может просматривать свойства в $cookies для обнаружения изменений, которые происходят в файлах cookie браузеров.

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

Фактическая реализация выполняется через объект $cookiesProvider, который можно передать через put.

Для 1.3 и ниже: Для тех из вас, кто сделал все возможное, чтобы не загружать плагины jQuery, это выглядит приятной заменой для Angular - https://github.com/ivpusic/angular-cookie

Ответ 3

В Angular v1.4 вы можете наконец установить некоторые параметры для файлов cookie, например, истечения срока действия. Вот очень простой пример:

var now = new Date(),
    // this will set the expiration to 12 months
    exp = new Date(now.getFullYear()+1, now.getMonth(), now.getDate());

$cookies.put('someToken','blabla',{
  expires: exp
});

var cookie = $cookies.get('someToken');
console.log(cookie); // logs 'blabla'

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

Объект, переданный в качестве третьего параметра функции put выше, позволяет также использовать другие параметры, такие как установка path, domain и secure. Проверьте документы для обзора.

PS. В качестве побочной заметки, если вы обновляете мнение о том, что $cookieStore устарел, поэтому $cookies теперь является единственным методом обработки файлов cookie. см. docs

Ответ 4

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

Обычно вы уже знаете, сколько дольше cookie будет длиться в считанные секунды.

    var today = new Date();
    var expiresValue = new Date(today);

    //Set 'expires' option in 1 minute
    expiresValue.setMinutes(today.getMinutes() + 1); 

    //Set 'expires' option in 2 hours
    expiresValue.setMinutes(today.getMinutes() + 120); 


    //Set 'expires' option in (60 x 60) seconds = 1 hour
    expiresValue.setSeconds(today.getSeconds() + 3600); 

    //Set 'expires' option in (12 x 60 x 60) = 43200 seconds = 12 hours
    expiresValue.setSeconds(today.getSeconds() + 43200); 

    $cookies.putObject('myCookiesName', 'myCookiesValue',  {'expires' : expiresValue});

и вы можете получить его как обычно:

    var myCookiesValue = $cookies.getObject('myCookiesName');

Если пустой, он возвращает undefined.

Ссылки

http://www.w3schools.com/jsref/jsref_obj_date.asp
https://docs.angularjs.org/api/ngCookies/provider/ $cookiesProvider # defaults

Ответ 5

Вы можете перейти к angular.js script и изменить файл вставки cookie
поиск self.cookies = function(name, value) { то u может изменить код, который добавляет файл cookie, например, в течение 7 дней

 if (value === undefined) {
    rawDocument.cookie = escape(name) + "=;path=" + cookiePath +
                            ";expires=Thu, 01 Jan 1970 00:00:00 GMT";
  } else {
    if (isString(value)) {
        var now = new Date();
        var time = now.getTime();
        time += 24*60*60*1000*7;
        now.setTime(time);
         cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) +
                 ';path=' + cookiePath+";expires="+now.toGMTString()).length + 1

Ответ 6

Я знаю, что этот вопрос немного стар, и уже есть принятый ответ.

Но все-таки проблема, с которой я борюсь (не касаюсь jQuery или чистого Javascript).

Итак, после некоторых исследований я нашел это: https://github.com/ivpusic/angular-cookie

Который обеспечивает "интерфейс", очень похожий на $cookieStore. И позволяет настроить дату истечения срока действия (значение и единицы измерения).

О поддержке angular на дату истечения срока действия с помощью $cookie или $cookieStore, "они" обещают обновления по этому вопросу на 1.4, посмотрите на это: https://github.com/angular/angular.js/pull/10530

Можно установить дату истечения срока действия с помощью $cookieStore.put(...), по крайней мере, они предлагают, чтобы...

РЕДАКТИРОВАТЬ: Я столкнулся с "проблемой", вы не можете смешивать $cookies с модулем angular -cookie. Поэтому, если вы установите cookie с ipCookie(...), извлеките его с помощью ipCookie(...), потому что с $cookie он вернет undefined.

Ответ 7

Как указано в @vincent-briglia , есть выпадающий jQuery, который можно использовать в качестве обходного пути до тех пор, пока служба $cookie не станет настраиваемой - проверьте здесь

Ответ 8

Вы можете использовать https://github.com/ivpusic/angular-cookie

Сначала вам нужно ввести ipCookie в ваш модуль angular.

var myApp = angular.module('myApp', ['ipCookie']);

И теперь, например, если вы хотите использовать его с вашего контроллера

myApp.controller('cookieController', ['$scope', 'ipCookie', function($scope, ipCookie) {
  // your code here
}]);

Чтобы создать использование файла cookie

ipCookie(key, value);

Значение поддерживает строки, числа, булевы, массивы и объекты и будет автоматически сериализовано в файл cookie.

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

ipCookie(key, value, { expires: 21 });