[js] Cookies (set, get, remove)

51

Набор js функций для получения, установки значения и удаления кук

/**
 * Получение cookie
 * 
 * @param {String} name название cookie
 * @returns cookie если есть или undefined
 */
function getCookie(name) {
    const matches = document.cookie.match(new RegExp(
        "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ))
    return matches ? decodeURIComponent(matches[1]) : undefined
}

/**
 * Уcтанавливает значение cookie
 * 
 * @param {String} name название cookie
 * @param {String} value значение cookie
 * @param {Object} props Объект с дополнительными свойствами для установки cookie:
 * @param {Number|Date|Null} props.expires Время истечения cookie. Интерпретируется по-разному, в зависимости от типа: 
 *  Если число - количество секунд до истечения. 
 *  Если объект типа Date - точная дата истечения. 
 *  Если expires в прошлом, то cookie будет удалено. 
 *  Если expires отсутствует или равно 0, то cookie будет установлено как сессионное и исчезнет при закрытии браузера.
 * @param {String} props.path Путь для cookie.
 * @param {String} props.domain Домен для cookie.
 * @param {String} props.secure Пересылать cookie только по защищенному соединению.
 */
function setCookie(name, value, props) {
    props = props || {}
    let exp = props.expires

    if (typeof exp == "number" && exp) {
        const 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 (const propName in props) {
        updatedCookie += "; " + propName

        const propValue = props[propName]
        if (propValue !== true) { updatedCookie += "=" + propValue }
    }

    document.cookie = updatedCookie
}

/**
 * Удаление cookie
 * 
 * @param {String} name название cookie
 */
function deleteCookie(name) {
    setCookie(name, null, { expires: -1 })
}

За основу взят код.