Pregunta Cómo establecer la fecha de vencimiento de la cookie en AngularJS


  1. Queremos almacenar la información de Autorización del usuario en una cookie que no debe perderse al actualizar (F5) del navegador.

  2. Queremos almacenar información de autorización en "cookie permanente" en caso de que el usuario haya optado por la casilla de verificación "Recordarme" en el momento del inicio de sesión.


76
2017-09-27 14:51


origen


Respuestas:


Esto es posible en la construcción 1.4.0 de angular usando el ngCookies módulo:

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



Para 1.4: Como se señala en el comentario aquí y en otros a continuación, a partir del 1.4, el soporte de cookies nativo de Angular ahora brinda la capacidad de editar cookies:

Debido a 38fbe3ee, $ cookies ya no expondrán propiedades que   representar los valores actuales de las cookies del navegador. $ cookies ya no son votaciones   el navegador para cambios en las cookies y ya no copia las cookies   valores en el objeto $ cookies.

Esto fue cambiado porque la encuesta es costosa y causó problemas   con las propiedades $ cookies que no se sincronizan correctamente con el   valores reales de cookies del navegador (La razón por la cual el sondeo fue originalmente   se agregó para permitir la comunicación entre pestañas diferentes, pero hay   mejores formas de hacerlo hoy, por ejemplo localStorage).

La nueva API en $ cookies es la siguiente:

get put getObject putObject getAll remove Debe usar explícitamente   métodos anteriores para acceder a datos de cookies. Esto también significa que   ya no puede ver las propiedades en $ cookies para detectar cambios que   ocurrir en las cookies de los navegadores.

Esta función generalmente solo es necesaria si se creó una biblioteca de terceros   Cambiando programáticamente las cookies en tiempo de ejecución. Si confías en esto   entonces debes escribir un código que pueda reaccionar ante el tercero   biblioteca que realiza los cambios en las cookies o implementa su propia encuesta   mecanismo.

La implementación real se realiza a través de un $ cookiesProvider objeto, que se puede pasar a través del put llamada.

Para 1.3 y abajo: Para aquellos de ustedes que han hecho todo lo posible para evitar tener que cargar complementos jQuery, este parece ser un buen reemplazo para angular - https://github.com/ivpusic/angular-cookie


32
2017-12-14 02:56



En Angular v1.4 puedes finalmente establecer algunas opciones para las cookies, como la caducidad. Aquí hay un ejemplo muy simple:

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'

Si revisa sus cookies después de ejecutar este código, verá que la caducidad se configurará correctamente en la cookie denominada someToken.

El objeto pasó como un tercer parametro al put La función anterior también permite otras opciones, como establecer path, domain y secure. Comprobar los documentos para una descripción general.

PD - Como nota al margen si estás actualizando la mente que $cookieStore ha sido desaprobado, por lo $cookies ahora es el único método para tratar con las cookies. ver documentos


26
2018-03-04 12:44



Me gustaría presentar un ejemplo adicional ya que algunas personas conocen la duración adicional de la vida útil de las cookies. es decir. Quieren configurar una cookie para que dure 10 minutos más, o 1 día más.

Por lo general, ya sabe cuánto tiempo durará la cookie en segundos.

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

y puedes recuperarlo como de costumbre:

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

Si está vacío, devuelve indefinido.

Campo de golf;

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


9
2017-09-09 11:08



Puede ir al script angular.js y cambiar el insert cookie
buscar self.cookies = function(name, value) { a continuación, puede cambiar el código que agrega la cookie, por ejemplo, durante 7 días

 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



Sé que esta pregunta es un poco vieja, y ya tengo una respuesta aceptada.

Pero todavía es un problema presente con el que estoy luchando (no con respecto a jQuery o Javascript puro).

Entonces, después de algunas investigaciones, he encontrado esto: https://github.com/ivpusic/angular-cookie

Que ofrece una "interfaz" bastante similar a $ cookieStore. Y permite configurar la fecha de vencimiento (valor y unidades).

Acerca de la compatibilidad nativa angular en la fecha de vencimiento con $ cookie o $ cookieStore, "ellos" prometen actualizaciones sobre este tema en 1.4, investigue esto: https://github.com/angular/angular.js/pull/10530

Será posible establecer la fecha de vencimiento con $ cookieStore.put (...), al menos proponen que ...

EDITAR: Encontré un "problema" que no puede mezclar $ cookies con angular-cookie modular. Entonces, si configura una cookie conipCookie(...) recuperarlo con ipCookie(...) porque con $ cookie volverá undefined.


2
2018-02-05 22:56



Como @ vincent-briglia señalado, hay un complemento jQuery que puede usarse como una solución alternativa hasta $cookie el servicio se vuelve configurable compruébalo aquí


1
2017-09-20 16:19



Puedes utilizar https://github.com/ivpusic/angular-cookie

Primero necesitas inyectar ipCookie en tu módulo angular.

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

Y ahora, por ejemplo, si quieres usarlo desde tu controlador

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

Para crear un uso de cookies

ipCookie(key, value);

El valor admite cadenas, números, booleanos, matrices y objetos, y se serializará automáticamente en la cookie.

También puede establecer algunas opciones adicionales, como el número de días en que caduca una cookie

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

0
2017-11-06 16:01