Frage So legen Sie das Ablaufdatum für Cookies in AngularJS fest


  1. Wir möchten die Autorisierungsinformationen des Benutzers in einem Cookie speichern, der beim Aktualisieren (F5) des Browsers nicht verloren gehen sollte.

  2. Wir möchten Autorisierungsinformationen in "permanent-cookie" speichern, wenn sich der Benutzer zum Zeitpunkt der Anmeldung für das Kontrollkästchen "Remember Me" entschieden hat.


76
2017-09-27 14:51


Ursprung


Antworten:


Dies ist möglich in der Version 1.4.0 von eckigen mit der ngCookies Modul:

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

39
2018-03-13 13:20



Für 1.4: Wie bereits in den Kommentaren unten und in weiteren Punkten ab Version 1.4 erwähnt, bietet Angulars native Cookie-Unterstützung jetzt die Möglichkeit, Cookies zu bearbeiten:

Aufgrund von 38fbe3ee, $ cookies werden nicht mehr Eigenschaften, die   repräsentieren die aktuellen Browser-Cookie-Werte. $ cookies fragt nicht mehr ab   der Browser für Änderungen an den Cookies und kopiert kein Cookie mehr   Werte auf das $ cookies-Objekt.

Dies wurde geändert, da die Abfrage teuer ist und Probleme verursacht   mit den $ cookies Eigenschaften, die nicht korrekt mit dem synchronisieren   tatsächliche Browser-Cookie-Werte (Grund für die ursprüngliche Abfrage)   hinzugefügt wurde, um die Kommunikation zwischen verschiedenen Tabs zu ermöglichen, aber es gibt   bessere Möglichkeiten, dies heute zu tun, zum Beispiel localStorage.)

Die neue API für $ cookies lautet wie folgt:

get getObject putObject getAll remove Sie müssen explizit das verwenden   Methoden oben, um auf Cookie-Daten zuzugreifen. Dies bedeutet auch, dass Sie   kann die Eigenschaften von $ cookies nicht länger beobachten, um Änderungen zu erkennen   Bei den Browsern treten Cookies auf.

Diese Funktion wird normalerweise nur benötigt, wenn es sich um eine 3rd-Party-Bibliothek handelt   Programmgesteuertes Ändern der Cookies zur Laufzeit. Wenn Sie sich darauf verlassen   Dann müssen Sie entweder Code schreiben, der auf die dritte Partei reagieren kann   Bibliothek Änderungen an Cookies vornehmen oder eigene Abfragen durchführen   Mechanismus.

Die eigentliche Implementierung erfolgt über a $ cookiesProvider Objekt, das über die put Anruf.

Für 1.3 und darunter: Für diejenigen von euch, die ihr Bestes getan haben, um das Laden von jQuery-Plugins zu vermeiden, scheint dies ein schöner Ersatz für eckige zu sein - https://github.com/ivpusic/angular-cookie


32
2017-12-14 02:56



In Angular v1.4 können Sie endlich Legen Sie einige Optionen für die Cookies fest, z. B. das Ablaufdatum. Hier ist ein sehr einfaches Beispiel:

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'

Wenn Sie nach dem Ausführen dieses Codes Ihre Cookies überprüfen, werden Sie feststellen, dass der Ablauf ordnungsgemäß auf den angegebenen Cookie gesetzt wird someToken.

Das Objekt wurde als dritter Parameter an die put Funktion oben ermöglicht auch andere Optionen, wie zum Beispiel Einstellung path, domain und secure. Prüfen die Dokumente für einen Überblick.

PS - Als Randnotiz, wenn Sie upgraden, beachten Sie das $cookieStore ist veraltet, also $cookies ist jetzt die einzige Methode, um mit Cookies umzugehen. sehen Dokumente


26
2018-03-04 12:44



Ich möchte ein extra Beispiel vorstellen, da einige Leute die zusätzliche Lebensdauer der Cookies kennen. dh. Sie möchten einen Cookie setzen, der weitere 10 Minuten oder einen weiteren Tag dauert.

Normalerweise wissen Sie bereits, wie lange der Cookie in Sekunden dauern wird.

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

und Sie können es wie gewohnt abrufen:

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

Wenn es leer ist, wird es undefiniert zurückgegeben.

Links;

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


9
2017-09-09 11:08



Sie können zum angular.js-Skript wechseln und den Einfüge-Cookie ändern
suchen nach self.cookies = function(name, value) { dann können Sie den Code ändern, der den Cookie zum Beispiel für 7 Tage hinzufügt

 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

3
2017-09-07 12:45



Ich weiß, dass diese Frage ein wenig alt ist und bereits eine akzeptierte Antwort hat.

Aber immer noch ein aktuelles Problem, mit dem ich zu kämpfen habe (nicht in Bezug auf jQuery oder reines Javascript).

Nach einigen Recherchen habe ich folgendes gefunden: https://github.com/ivpusic/angular-cookie

Das liefert eine "Schnittstelle", die $ cookieStore ziemlich ähnlich ist. Und erlaubt, das Ablaufdatum (Wert und Einheiten) zu konfigurieren.

Über eckige native Unterstützung am Ablaufdatum mit $ cookie oder $ cookieStore, "sie" versprechen Updates zu diesem Thema unter 1.4, schau dir dazu an: https://github.com/angular/angular.js/pull/10530

Es ist möglich, das Ablaufdatum mit $ cookieStore.put (...) zu setzen, zumindest schlagen sie vor, dass ...

BEARBEITEN: Ich bin auf ein "Problem" gestoßen, das Sie nicht mit eckigen Cookies kombinieren können. Also, wenn Sie einen Cookie mit setzenipCookie(...) erhalte es mit ipCookie(...) denn mit $ cookie wird es zurückkehren undefined.


2
2018-02-05 22:56



Als @ Vincent-Briglia wies darauf hinEs gibt ein jQuery-Drop-In, das bis zur Problemumgehung verwendet werden kann $cookie Service wird konfigurierbar - schau es dir hier an


1
2017-09-20 16:19



Sie dürfen verwenden https://github.com/ivpusic/angular-cookie

Zuerst müssen Sie ipCookie in Ihr Winkelmodul injizieren.

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

Und jetzt, zum Beispiel, wenn Sie es von Ihrem Controller verwenden möchten

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

Um einen Cookie zu erstellen, benutze

ipCookie(key, value);

Der Wert unterstützt Strings, Zahlen, Booleans, Arrays und Objekte und wird automatisch in den Cookie serialisiert.

Sie können auch einige zusätzliche Optionen festlegen, z. B. die Anzahl der Tage, an denen ein Cookie abläuft

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

0
2017-11-06 16:01