SAFAD
SAFAD

Reputation: 784

Setting persistent cookies with javascript

I have found a weird bug in my application and due to my small experience with Javascript I couldn't debug it;

I am trying to set a persistent cookie, which will die after one year from its set (max value in major browsers) but persists and won't be deleted after the browser gets closed. I've been using this code:

// Build the expiration date string:
var expiration_date = new Date();
expiration_date.setYear (expiration_date.getYear () + 1);
expiration_date = expiration_date.toGMTString();
// Build the set-cookie string:
var cookie_string = "test_cookies = true; path=/; expires=" + expiration_date;
// Create/update the cookie:
document.cookie = cookie_string;

I've noticed that the cookie has a session tag when I use cookie manager plugin, and only the ones with this tag get removed when the browser shuts down (others like Wordpress's and such scripts persist).

Upvotes: 21

Views: 45914

Answers (3)

Vivek Nuna
Vivek Nuna

Reputation: 1

You can also use the max-age attribute.

cookie_string = "test_cookies=true; path=/; max-age=31536000";
  • One week: max-age=604800
  • One month: max-age=2628000
  • One year: max-age=31536000

Upvotes: 6

pete
pete

Reputation: 25081

I changed your syntax over to my style of coding (variables at the top, minimal re-casting, etc.) and the example below works on my localhost quite well.

// Build the expiration date string:
var expiration_date = new Date();
var cookie_string = '';
expiration_date.setFullYear(expiration_date.getFullYear() + 1);
// Build the set-cookie string:
cookie_string = "test_cookies=true; path=/; expires=" + expiration_date.toUTCString();
// Create or update the cookie:
document.cookie = cookie_string;

If you are having problems on a production server, try setting the domain of the cookie as well (www.quirksmode.org/js/cookies.html#link5)

Upvotes: 26

keeganwatkins
keeganwatkins

Reputation: 3686

have you tried using the getFullYear() and setFullYear() methods of the Date instance instead of getYear() and setYear() ? the latter are are deprecated, see here.

hope that helps! cheers.

Upvotes: 2

Related Questions