73
  1. Chcemy przechowywać informacje o autoryzacji użytkownika w pliku cookie, które nie powinny zostać utracone po odświeżeniu (F5) przeglądarki.Jak ustawić datę wygaśnięcia pliku cookie w AngularJS

  2. Chcemy, aby zapisać informacje o autoryzacji w „trwałym cookie” w przypadku użytkownik wybrał pole wyboru „Remember Me” w momencie logowania do.

+2

Na razie używam lokalne przechowywanie i magazynowanie w tym celu sesji Ref http: //people.opera. com/shwetankd/external/demos/webstorage_demo.htm –

Odpowiedz

1

Jako @ Vincent-briglia pointed out, istnieje jQuery drop-in, który może być używany jako obejście dopóki $cookie usługa staje się konfigurowalna - check it out here

32

Dla 1.4: Jak zauważono w komentarzu tutaj i inni poniżej, jako 1,4, natywne wsparcie cookies kątowej teraz zapewnia możliwość edycji plików cookie:

z powodu 38fbe3ee, $ ciasteczka nie będą już wystawiać właściwości reprezentują aktualny Cooki przeglądarki e wartości. $ cookies nie ankietuje już przeglądarki w celu zmiany plików cookie i nie kopiuje wartości cookie na obiekt $ cookie.

ta została zmieniona, ponieważ odpytywanie jest drogi i spowodowały problemy z właściwości $ Cookies nie synchronizacji poprawnie z rzeczywistych wartości ciasteczek przeglądarki (powód odpytywania pierwotnie dodano, aby umożliwić komunikację między różnymi kartami, ale nie . są lepsze sposoby, aby to zrobić dzisiaj, na przykład localStorage)

nowe API na $ ciasteczka jest następujący:

dostać umieścić getObject putObject getAll usunąć musisz explictly użyć powyższych metod w celu uzyskania dostępu do gruchać kie danych. Oznacza to również, że użytkownik nie może już oglądać właściwości plików $ cookie w celu wykrycia zmian, które wystąpiły w plikach cookie przeglądarki.

Ta funkcja jest potrzebna na ogół tylko wtedy, gdy biblioteka innej firmy była programowo zmieniająca pliki cookie w środowisku wykonawczym. Jeśli polegasz na tej , musisz albo napisać kod, który może zareagować na bibliotekę innej firmy wprowadzając zmiany do plików cookie lub wdrożyć własny mechanizm odpytywania .

Rzeczywistą implementację wykonuje się za pomocą obiektu $cookiesProvider, który można przekazać za pośrednictwem wywołania put.

1,3 i poniżej: Dla tych z Was, którzy zrobili wszystko, aby uniknąć konieczności ładowania wtyczek jQuery, to wydaje się być miłym zamiennik kątowa - https://github.com/ivpusic/angular-cookie

+0

Świetne rozwiązanie przy użyciu Angulara 1.3 lub niższej. – vegemite4me

3

Można pójść do angularjs skrypt i zmienić cookie wstawić
poszukiwania self.cookies = function(name, value) { następnie u może zmienić kod, który dodaje cookie na przykład przez 7 dni

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 
2

wiem, że to pytanie jest trochę stary, a już akceptowaną odpowiedź.

Ale nadal obecny problem, z którym walczę (nie dotyczy jQuery lub czystej wersji Javascript).

Tak, po niektórych badań znalazłem to: https://github.com/ivpusic/angular-cookie

który dostarcza się "interfejs" całkiem podobny do $ CookieStore. I pozwala skonfigurować datę wygaśnięcia (wartość i jednostki).

O kątowej natywnym wsparciem w dniu wygaśnięcia dolarów ciasteczka lub $ CookieStore, „oni” aktualizacje obietnica na ten temat na 1,4, spojrzeć na to: https://github.com/angular/angular.js/pull/10530

Będzie to możliwe, aby ustawić datę ważności z $ CookieStore .put (...), co najmniej oni zaproponować ...

EDIT: natknąłem się na "problem" nie można mieszać $ ciasteczka z kanciasty cookie modułowych. Więc jeśli ustawisz plik cookie pod numerem ipCookie(...), pobierz go za pomocą ipCookie(...), ponieważ z $ cookie zwróci undefined.

25

W wersji Angular v1.4 można w końcu ustawić niektóre opcje plików cookie, takie jak wygasanie. Oto bardzo prosty przykład:

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' 

Jeśli zaznaczysz pliki cookie po uruchomieniu tego kodu będzie można zobaczyć, że wygaśnięcie zostanie prawidłowo ustawione cookie o nazwie someToken.

Przedmiotem przekazywane jako trzeci param do funkcji put powyżej pozwala również inne opcje, takie jak tworzenie path, domain i secure. Sprawdź przegląd the docs.

PS - Na marginesie, jeśli podnosimy głowy, że $cookieStore została zaniechana, więc $cookies jest obecnie jedynym sposobem radzenia sobie z cookies. zobacz docs

37

Jest to możliwe w 1.4.0 build kątowej za pomocą modułu ngCookies:

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

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

nie jest bardzo jasne z dokumentacji, jeśli '{'wygasa': expireDate});' lub .............................. ........................ '[{'expires': expireDate}]);' format powinien być użyty ... – Serge

9

chciałbym przedstawić dodatkowy przykład, jak niektórzy ludzie wiedzą dodatkowy czas Żywotność plików cookie. to znaczy. Chcą ustawić plik cookie na 10 minut lub 1 dzień.

Zazwyczaj już wiesz, jak długo ciasteczko potrwa w ciągu kilku sekund.

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}); 

i można je odzyskać jak zwykle:

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

Jeżeli pusta, zwraca niezdefiniowane.

Łącza;

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

+0

Gdzie 'dzisiaj' pochodzić z? –

+0

Starałem się, aby kod był ładniejszy i zapomniałem zmienić wszystkie "teraz jest do dziś. Teraz powinno być w porządku. –

0

można użyć https://github.com/ivpusic/angular-cookie

najpierw trzeba wstrzyknąć ipCookie do modułu kątowego.

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

A teraz, na przykład, jeśli chcesz używać go z kontrolerem

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

Aby utworzyć takie stosowanie tego pliku za

ipCookie(key, value); 

Wartość obsługuje napisy, liczby, wartości logiczne, tablice i obiektów i zostaną automatycznie serializowane do pliku cookie.

Można również ustawić dodatkowe opcje, takie jak numer dnia, kiedy plik cookie wygasa

ipCookie(key, value, { expires: 21 }); 
Powiązane problemy