|
/** |
|
* Получает Cookie |
|
* @param {string} name Имя Cookie |
|
* @returns {string} Значение Cookie или undefined |
|
*/ |
|
function getCookie(name) { |
|
|
|
let matches = document.cookie.match(new RegExp( |
|
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" |
|
)); |
|
|
|
return matches ? decodeURIComponent(matches[1]) : undefined; |
|
|
|
} |
|
|
|
/** |
|
* Устанавливает или обновляет Cookie |
|
* @param {string} name Имя Cookie |
|
* @param {string} value Значение Cookie |
|
* @param {Object} props Объект с дополнительными свойствами для установки Cookie: |
|
* expires - Время истечения Cookie. Интерпретируется по-разному, в зависимости от типа: |
|
* Если число - количество секунд до истечения. |
|
* Если объект типа Date - точная дата истечения. |
|
* Если expires в прошлом, то Cookie будет удалено. |
|
* Если expires отсутствует или равно 0, то Cookie будет установлено как сессионное и исчезнет после закрытия браузера. |
|
* path - Путь для Cookie. |
|
* domain - Домен для Cookie. |
|
* secure - Пересылать Cookie только по защищенному соединению. |
|
*/ |
|
function setCookie(name, value, props) { |
|
|
|
props = props || {}; |
|
|
|
let exp = props.expires; |
|
|
|
if (typeof exp == 'number' && exp) { |
|
|
|
let d = new Date(); |
|
|
|
d.setTime(d.getTime() + exp*1000); |
|
|
|
exp = props.expires = d; |
|
}; |
|
|
|
if (exp && exp.toUTCString) { props.expires = exp.toUTCString() }; |
|
|
|
value = encodeURIComponent(value); |
|
|
|
let updatedCookie = name + '=' + value; |
|
|
|
for (let propName in props) { |
|
|
|
updatedCookie += '; ' + propName; |
|
|
|
let propValue = props[propName]; |
|
|
|
if (propValue !== true) { updatedCookie += '=' + propValue }; |
|
} |
|
|
|
document.cookie = updatedCookie; |
|
|
|
} |
|
|
|
/** |
|
* Удаляет Cookie |
|
* @param name Имя Cookie |
|
*/ |
|
function deleteCookie(name) { |
|
|
|
setCookie(name, null, { expires: -1 }); |
|
|
|
} |