|
/** |
|
* Cookie set / get / delete |
|
* @namespace |
|
*/ |
|
var Cookie = {}; // qv stackoverflow.com/questions/1969232, stackoverflow.com/questions/6108207 |
|
|
|
|
|
/** |
|
* Sets cookie. |
|
* |
|
* @param {string} name - Name of cookie to be created. |
|
* @param {string} value - Value of cookie. |
|
* @param {number} [days] - Lifetime: if unset, creates session cookie; if -ve, deletes cookie. |
|
*/ |
|
Cookie.set = function(name, value, days) { |
|
// strip disallowed chars in name, encode name & value |
|
name = encodeURIComponent(name.replace(/[\s;,"=\\]/g, '')); |
|
var cookie = name + "=" + encodeURIComponent(value); |
|
// expiry |
|
if (typeof days != 'undefined') { |
|
var date = new Date(); |
|
date.setTime(date.getTime() + Number(days)*24*60*60*1000); |
|
cookie += '; expires='+date.toUTCString(); |
|
} |
|
document.cookie = cookie + '; path=/'; // make available to entire domain |
|
}; |
|
|
|
|
|
/** |
|
* Returns cookie value. |
|
* |
|
* @param {string} name - Name of cookie. |
|
* @returns {string|null} Value of cookie. |
|
*/ |
|
Cookie.get = function(name) { |
|
// strip disallowed chars & encode name |
|
name = encodeURIComponent(name.replace(/[\s;,"=\\]/g, '')); |
|
var cookies = document.cookie.split('; '); |
|
for (var c=0; c<cookies.length; c++) { |
|
var cookie = cookies[c]; |
|
if (cookie.indexOf(name+'=') == 0) { // gotcha! |
|
var value = decodeURIComponent(cookie.slice(name.length+1)); |
|
return value; |
|
} |
|
} |
|
return null; // not found |
|
}; |
|
|
|
|
|
/** |
|
* Deletes cookie. |
|
* |
|
* @param {string} name - Name of cookie to be deleted. |
|
*/ |
|
Cookie.del = function(name) { |
|
// RFC6265: expiration date must be in the past; |
|
// note path & domain must match cookie creation values |
|
Cookie.set(name, '', -1); |
|
}; |