How to set expiration date for cookie in AngularJS

JavascriptCookiesAngularjsSession CookiesAngular Cookies

Javascript Problem Overview


  1. We want to store User's Authorization information in cookie which should not be lost upon refresh (F5) of browser.

  2. We want to store authorization info in "permanent-cookie" in case user has opted for "Remember Me" check box at the time of log-on.

Javascript Solutions


Solution 1 - Javascript

This is possible in the 1.4.0 build of angular using the ngCookies module:

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

Solution 2 - Javascript

For 1.4: As noted in the comment here and others below, as of 1.4, Angular's native cookie support now provides the ability to edit cookies:

> Due to 38fbe3ee, $cookies will no longer expose properties that > represent the current browser cookie values. $cookies no longer polls > the browser for changes to the cookies and no longer copies cookie > values onto the $cookies object. > > This was changed because the polling is expensive and caused issues > with the $cookies properties not synchronizing correctly with the > actual browser cookie values (The reason the polling was originally > added was to allow communication between different tabs, but there are > better ways to do this today, for example localStorage.) > > The new API on $cookies is as follows: > > get put getObject putObject getAll remove You must explictly use the > methods above in order to access cookie data. This also means that you > can no longer watch the properties on $cookies to detect changes that > occur on the browsers cookies. > > This feature is generally only needed if a 3rd party library was > programmatically changing the cookies at runtime. If you rely on this > then you must either write code that can react to the 3rd party > library making the changes to cookies or implement your own polling > mechanism.

The actual implementation is done via a $cookiesProvider object, which can be passed via the put call.

For 1.3 and below: For those of you who have done your best to avoid having to load jQuery plugins, this appears to be a nice replacement for angular - https://github.com/ivpusic/angular-cookie

Solution 3 - Javascript

In Angular v1.4 you can finally set some options for the cookies, such as the expiration. Here's a very simple example:

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'

If you check your cookies after running this code you will see that the expiration will be properly set to the cookie named someToken.

The object passed as a third param to the put function above allows for other options as well, such as setting path, domain and secure. Check the docs for an overview.

PS - As a side note if you are upgrading mind that $cookieStore has been deprecated, so $cookies is now the only method to deal with cookies. see docs

Solution 4 - Javascript

I would like to present an extra example as some people know the extra duration of the cookies lifetime. ie. They want to set a cookie to last 10 more minutes, or 1 more day.

Usually you already know how much longer the cookie will last in seconds.

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

and you can retrieve it as usual:

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

If empty, it returns undefined.

Links;

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

Solution 5 - Javascript

You can go to the angular.js script and change the insert cookie
search for self.cookies = function(name, value) { then u can change the code that adds the cookie for example for 7 days

 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

Solution 6 - Javascript

I know that this question is a little bit old, and already have an accepted answer.

But still a present problem which I 'm struggling with (not regarding jQuery or pure Javascript).

So, after some research I have found this: https://github.com/ivpusic/angular-cookie

Which delivers an "interface" quite similar to $cookieStore. And permits to configure the expiration date (value and units).

About angular native support on the expiration date with $cookie or $cookieStore, "they" promise updates on this subject on 1.4, look into this: https://github.com/angular/angular.js/pull/10530

It will be possible to set expiration date with $cookieStore.put(...), at least they propose that...

EDIT: I encountered a "problem" you cannot mix $cookies with angular-cookie modular. So if you set a cookie withipCookie(...) retrieve it with ipCookie(...) because with $cookie it will return undefined.

Solution 7 - Javascript

As @vincent-briglia pointed out, there's a jQuery drop-in that can be used as a workaround until $cookie service becomes configurable - check it out here

Solution 8 - Javascript

You may use https://github.com/ivpusic/angular-cookie

First you need to inject ipCookie into your angular module.

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

And now, for example if you want to use it from your controller

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

To create a cookie use

ipCookie(key, value);

The value supports strings, numbers, booleans, arrays and objects and will be automatically serialized into the cookie.

You can also set some additional options, like number of day when a cookie expires

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnandView Question on Stackoverflow
Solution 1 - JavascriptGeert van DortView Answer on Stackoverflow
Solution 2 - JavascriptstreetlogicsView Answer on Stackoverflow
Solution 3 - JavascriptAurelioView Answer on Stackoverflow
Solution 4 - JavascriptAndreas PanagiotidisView Answer on Stackoverflow
Solution 5 - JavascriptyoniaView Answer on Stackoverflow
Solution 6 - JavascriptPaulo OliveiraView Answer on Stackoverflow
Solution 7 - JavascriptJan MolakView Answer on Stackoverflow
Solution 8 - JavascriptAndy M.View Answer on Stackoverflow