Файл cookie — это небольшой текстовый файл, который позволяет хранить небольшой объем данных (около 4 КБ) на компьютере пользователя. Он обычно используются для отслеживания информации, например пользовательские настройки, которые сайт может получить, чтобы персонализировать страницу, когда пользователь посещает веб-сайт в следующий раз.
Куки-файлы — это старый механизм хранения данных на стороне клиента, который изначально был разработан для использования серверными языками, такими как PHP, ASP и т. д. Однако куки-файлы также можно создавать, получать к ним доступ и изменять напрямую с помощью JavaScript, но этот процесс немного сложнее.
Размер файла cookie может составлять до 4 КБ, включая его имя и значения. Файлы cookie, размер которых превышает этот объем, обрезаются по размеру. Кроме того, каждый раз, когда браузер запрашивает страницу на сервере, все данные в куки автоматически отправляются на сервер в рамках запроса.
Не храните конфиденциальные данные, такие как пароль или данные кредитной карты в cookie-файлах, поскольку они могут быть использованы злоумышленниками.
Создание Cookie в JavaScript
В JavaScript вы можете создавать, читать и удалять файлы cookie с помощью свойства document.cookie. Это свойство представляет все cookie файлы связанные с документом.
Чтобы создать или сохранить новый файл cookie, присвойте этому свойству строку name=value, например:
document.cookie = "firstName=Christopher";
Значение cookie не может содержать точку с запятой, запятую или пробел. По этой причине вам нужно будет использовать встроенную в JavaScript функцию encodeURIComponent() для кодирования значений, содержащих эти символы, перед сохранением их в файле cookie. Аналогично, вам нужно будет использовать соответствующую функцию decodeURIComponent(), когда вы читаете значение cookie.
document.cookie = "name=" + encodeURIComponent("Christopher Columbus");
По умолчанию время жизни куки — это текущий сеанс браузера, что означает, что он удаляется при выходе пользователя из браузера. Чтобы файл cookie сохранялся после текущего сеанса браузера, вам необходимо указать его время жизни (в секундах) с атрибутом max-age. Этот атрибут определяет, как долго файл cookie может оставаться в системе пользователя до его удаления, например, следующий файл cookie будет действовать в течение 30 дней.
document.cookie = "firstName=Christopher; max-age=" + 30*24*60*60;
Вы также можете указать время жизни куки с атрибутом expires. Этот атрибут принимает точную дату (в формате GMT / UTC), когда срок действия файла cookie истекает, а не вариацию в секундах.
document.cookie = "firstName=Christopher; expires=Thu, 31 Dec 2099 23:59:59 GMT";
Вот функция, которая устанавливает cookie с необязательным атрибутом max-age. Вы также можете использовать ту же функцию для удаления куки, передав значение 0 для параметра daysToLive.
function setCookie(name, value, daysToLive) {
// Кодируем значение, чтобы избежать точек с запятой, запятых и пробелов
var cookie = name + "=" + encodeURIComponent(value);
if(typeof daysToLive === "number") {
/* Устанавливаем атрибут max-age, чтобы срок действия cookie истек
по истечении указанного количества дней */
cookie += "; max-age=" + (daysToLive*24*60*60);
document.cookie = cookie;
}
}
По умолчанию файл cookie доступен для всех веб-страниц в одном и том же каталоге или любых его подкаталогах. Однако если вы укажете путь, файл cookie будет доступен для всех веб-страниц по указанному пути и для всех веб-страниц во всех подкаталогах этого пути. Например, если указан путь / cookie, он доступен на веб-сайте независимо от того, на какой странице создается cookie.
document.cookie = "firstName=Christopher; path=/";
Кроме того, вы можете использовать атрибут domain, если вы хотите, чтобы cookie был доступен в поддоменах. По умолчанию файлы cookie доступны только для страниц в домене, в котором они были установлены.
Если файл cookie, созданный страницей на blog.example.com, устанавливает свой атрибут path в /, а атрибут домена example.com, этот файл cookie также будет доступен для всех веб-страниц на страницах backend.example.com, portal.example.com и т.д. Однако он не будет доступен за пределами домена.
document.cookie = "firstName=Christopher; path=/; domain=example.com";
Существует также логический атрибут с именем secure. Если этот атрибут указан, cookie будет передаваться только через безопасное (то есть зашифрованное) соединение, такое как HTTPS.
document.cookie = "firstName=Christopher; path=/; domain=example.com; secure";
Чтение Cookie
Чтение файла cookie немного сложнее, поскольку свойство document.cookie просто возвращает строку, содержащую точку с запятой и список всех файлов cookie, разделенных пробелами (т.е. пары name=value, например, firstName=John; lastName=Doe;). Эта строка не содержит атрибутов, таких как expires, path, domain и т. д., которые могли быть установлены для cookie.
Чтобы получить отдельный файл cookie из этого списка, вам необходимо использовать метод split(), чтобы разбить его на отдельные пары name=value и найти конкретное имя, как показано ниже:
function getCookie(name) {
// Разбиваем строку cookie и получаем все отдельные пары имя = значение в массиве
var cookieArr = document.cookie.split(";");
// Запускаем цикл по элементам массива
for(var i = 0; i < cookieArr.length; i++) {
var cookiePair = cookieArr[i].split("=");
/* Удаляем пробелы в начале имени файла cookie
и сравниваем его с заданной строкой */
if(name == cookiePair[0].trim()) {
// Расшифровываем значения cookie и возвращаем
return decodeURIComponent(cookiePair[1]);
}
}
// Возвращаем null, если не найдено
return null;
}
Теперь мы собираемся создать еще одну функцию checkCookie(), которая будет проверять, задан ли файл cookie firstName, используя вышеупомянутую функцию getCookie(), и если она установлена, то эта функция будет отображать приветственное сообщение; в противном случае эта функция предложит пользователю ввести свое имя и сохранить его в файле cookie, используя нашу ранее созданную функцию setCookie().
function checkCookie() {
// Получаем куки, используя нашу пользовательскую функцию
var firstName = getCookie("firstName");
if(firstName != "") {
alert("Welcome again, " + firstName);
} else {
firstName = prompt("Please enter your first name:");
if(firstName != "" && firstName != null) {
// Устанавливаем cookie с помощью нашей пользовательской функции
setCookie("firstName", firstName, 30);
}
}
}
Обновление Cookie
Единственный способ обновить или изменить файл cookie — это создать другой файл cookie с тем же name и path, что и существующий. Создание файла cookie с тем же именем, но с другим путем, чем у существующего, добавит дополнительный файл cookie. Вот пример:
// Создаем куки
document.cookie = "firstName=Christopher; path=/; max-age=" + 30*24*60*60;
// Обновляем куки
document.cookie = "firstName=Alexander; path=/; max-age=" + 365*24*60*60;
Удаление Cookie
Чтобы удалить cookie, просто установите его еще раз, используя тот же name, указав пустое или произвольное значение и установив для его атрибута max-age значение 0. Помните, что если вы указали path и атрибут domain для cookie, вам также нужно будет включить их при удалении.
// Удаляем куки
document.cookie = "firstName=; max-age=0";
// Указываем пути и домены при удалении куки
document.cookie = "firstName=; path=/; domain=example.com; max-age=0";
Однако, чтобы удалить cookie с помощью атрибута expires, просто установите его значение (то есть дату окончания срока действия) на дату, которая уже прошла, как показано ниже.
document.cookie = "firstName=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";
















