Cookies и хранение состояния. Cookies — установка

Скачать Viber 16.06.2019
Скачать Viber

JavaScript дает возможность устанавливать и читать куки в браузере. В данном уроке мы рассмотрим как происходит работа с куками, а также сделаем простую страницу, которая будет помнить введеное имя и отображать его при каждом входе.

Что такое куки (cookie)?

Куки - это небольшой объем данных, которые хранятся вэб браузером. Они позволяют Вам сохранять определенную информацию о пользователе и получать ее каждый раз, когда он посещает Вашу страницу. Каждый пользователь имеет свой собственный уникальный набор куков.

Обычно куки используются веб сервером для выполнения таких функций как отслеживание посещений сайта, регистрации на сайте и сохранения сведений о заказах или покупках. Однако нам не нужно придумывать программу для вэб сервера чтобы использовать куки. Мы можем использовать их с помощью JavaScript.

Свойство document.cookie .

В JavaScript куки доступны с помощью свойства cookie объекта document. Создать куки можно следующим образом:

И получить весь сохраненый набор куков так:

Var x = document.cookie;

Давайте рассмотрим сохранение и получение куков более подробно.

Сохранение куки

Для сохранения куки нужно присвоить document.cookie текстовую строку, которая содержит свойства куки, которые мы хотим создать:

document.cookie = " name = значение; expires= дата; path= путь; domain= домен; secure";

Свойства описаны в таблице:

Свойство Описание Пример
name = значение Устанавливает имя куки и его значение. username=Вася
expires= дата Устанавливает дату истечения срока хранения куки. Дата должна быть представлена в формате, который возвращает метод toGMTString() объекта Date . Если значение expires не задано, куки будет удалено при закрытии браузера. expires=
13/06/2003 00:00:00
path= путь Данная опция устанавливает путь на сайте, в рамках которого действует куки. Получить значение куки могут только документы из указанного пути. Обычно данное свойство оставляют пустым, что означает что только документ установивший куки может получит доступ к нему. path=/demo/
domain= домен Данная опция устанавливает домен, в рамках которого действует куки. Получить значение куки могут только сайты из указанного домена. Обычно данное свойство оставляют пустым, что означает, что только домен установивший куки может получит доступ к нему. domain=сайт
secure Данная опция указывает браузеру, что для пересылки куки на сервер следует использовать SSL. Очень редко используется. secure

Давайте посмотрим пример установки куки:

document.cookie = "username=Вася; expires=15/02/2011 00:00:00";

Данный код устанавливает куки username , и присваивает ему значение "Вася" , которое будет храниться до 15-го февраля 2011 года (используется Европейский формат времени!).

var cookie_date = new Date (2003, 01, 15); document.cookie = "username=Вася; expires=" + cookie_date.toGMTString();

Данный код выполняет точно такое же действие, как и предыдущий пример, но для установки даты используется метод Date.toGMTString() . Учтите, что нумерация месяца в объекте Date начинается с 0, то есть февраль - это 01 .

Document.cookie = "logged_in=yes";

Данный код устанавливает куки logged_in , и присваивает ему значение "yes" . Так как атрибут expires не установлен, то куки удалится при закрытии браузера.

var cookie_date = new Date (); // Текущая дата и время cookie_date.setTime (cookie_date.getTime() - 1); document.cookie = "logged_in=; expires=" + cookie_date.toGMTString();

Данный код устанавливает куки logged_in и присваивает строку хранения значение времени за одну секунду перед текущим - такая операция приведет к немедленному удалению куки. Ручной способ удалить куки!

Перекодирование значения куки!

Следует перекодировать значение куки для корректного хранения и отображения таких символов как пробел и двоеточие. Такая операция гарантирует, что браузер корректно воспримет значение. Перекодирование лекго выполняется функцией JavaScript escape() . Например:

document.cookie = "username=" + escape("Вася Пупкин") + "; expires=15/02/2003 00:00:00"; Функция для установки куки

Установка куки станет проще, если мы напишем специальную функцию, которая будет выполнять простые операции, такие как перекодирование значений и построение строки document.cookie . Например:

Function set_cookie (name, value, exp_y, exp_m, exp_d, path, domain, secure) { var cookie_string = name + "=" + escape (value); if (exp_y) { var expires = new Date (exp_y, exp_m, exp_d); cookie_string += "; expires=" + expires.toGMTString(); } if (path) cookie_string += "; path=" + escape (path); if (domain) cookie_string += "; domain=" + escape (domain); if (secure) cookie_string += "; secure"; document.cookie = cookie_string; }

Функция получает данные для куки в качестве аргументов, затем строит соответствующую строку и устанавливает куки.

Например, установка куки без срока хранения:

set_cookie ("username", "Вася Пупкин"); set_cookie ("username", "Вася Пупкин", 2011, 01, 15);

Установка куки со сроком хранения, доменом сайт , использованием SSL, но без пути:

set_cookie ("username", "Вася Пупкин", 2003, 01, 15, "", "сайт", "secure"); Функция для удаления куки.

Другая полезная функция для работы с куки представлена ниже. Функция "удаляет" куки из браузера посредством установки срока хранения на одну секунду раньше текущего значения времени.

function delete_cookie (cookie_name) { var cookie_date = new Date (); // Текущая дата и время cookie_date.setTime (cookie_date.getTime() - 1); document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString(); }

Для использования данной функции нужно только передать ей имя удаляемого куки:

Delete_cookie ("username");

Получение значения куки

Для того, чтобы получить значение предварительно установленного куки для текущего документа, нужно использовать свойство document.cookie:

Var x = document.cookie;

Таким образом возвращается строка, которая состоит из списка пар имя/значение, разделенных точкой с запятой для всех куки, которые действуют для текущего документа. Например:

"username=Вася; password=abc123"

В данном примере 2 куки, которые были предварительно установлены: username , который имеет значение "Вася" , и password , который имеет значение "abc123" .

Функция для получения значения куки

Обычно, нам нужно только значение одного куки за один раз. Поэтому строка куки не удобна для использования! Здесь приводится функция, которая обрабатывает строку document.cookies , возвращет только то куки, которое представляет интерес в конкретный момент:

Function get_cookie (cookie_name) { var results = document.cookie.match ("(^|;) ?" + cookie_name + "=([^;]*)(;|$)"); if (results) return (unescape (results)); else return null; }

Данная функция использует регулярное выражение для поиска имени куки, которое представляет интерес, а затем возвращает значение, которое обработано функцией unescape() для перекодирования к нормальному символьному виду. (Если куки не найдено, возвращается значение null.)

Данная функция проста в использовании. Например, для возврата значения куки username:

Var x = get_cookie ("username");

Простой пример использования

В данном примере мы сделали страницу, которая запрашивает Ваше имя при первом посещении, затем она сохраняет Ваше имя в куки и показывает его при следующих посещениях.

Откройте страницу в новом окне. При первом посещении она попросит ввести имя и сохранит его в куки. Если Вы посетите страницу еще раз, она отобразит на экране введенное имя из куки.

Для куки задаем срок хранения в 1 год от текущей даты, это означает, что браузер сохранит Ваше имя даже если Вы закроете его.

Вы можете посмотреть код страницы в браузере, выбрав функцию просмотра исходного кода. Здесь приводится основная часть кода:

if (! get_cookie ("username")) { var username = prompt ("Пожалуйста, введите Ваше имя", ""); if (username) { var current_date = new Date; var cookie_year = current_date.getFullYear () + 1; var cookie_month = current_date.getMonth (); var cookie_day = current_date.getDate (); set_cookie ("username", username, cookie_year, cookie_month, cookie_day); } } else { var username = get_cookie ("username"); document.write ("Привет, " + username + ", добро пожаловать на страницу!"); document.write ("
Forget about me!"); }

Данный урок показал Вам, как использовать куки в JavaScript для хранения информации о Ваших посетителях. Спасибо за внимание! :)

Что такое cookies?

Cookies - это технология, позволяющая сайтам сохранять в браузере небольшую порцию данных (до 4Кбайт).

Обычно эти данные используются на сайте для того, чтобы:

  • "узнать" (идентифицировать) пользователя (эмулировать постоянное соединение с сервером);
  • сохранить информацию о просмотренных страницах или товаров;
  • осуществить простую защиту счётчиков и системы голосования от накрутки;
  • запомнить настройки интерфейса, расположение блоков, товара, добавленного в корзину и много другого.
Как работают cookies

Механизм работы с cookies рассмотрим на следующем примере:

Принцип работы механизма cookies

  • Клиент (веб-браузер) посылает серверу запрос (запрашивает у него страницу). Если в браузере есть cookies, связанные с этим сайтом, то он их посылает серверу в составе этого запроса.
  • Сервер получает запрос от клиента. Если в составе запроса есть куки, то их можно использовать для выполнения некоторой логики на сервере, подготовки пользователю персонализированной страницы или для чего-то другого. После этого отправляем клиенту ответ. В заголовке ответа отправляем веб-браузеру (клиенту) cookies, которые ему нужно будет сохранить.
  • Веб-браузер (клиент) получает ответ от сервера (страницу) и выводит его пользователю. Куки, которые пришли с сервера, браузер сохраняет в своё хранилище.
  • JavaScript - document.cookie

    // получить значения всех cookies страницы var cookies = document.cookie; // выведем куки в консоль браузера console.log(cookies); // выведем с помощью функции alert alert(cookies);

    Данное свойство представляет собой строку и чтобы в ней что-то найти, например, определённую cookie (по ключу), её необходимо разобрать. Для этого нужно написать JavaScript код (например, с использованием регулярных выражений) или воспользоваться специально предназначенного для этого библиотекой js-cookie . Данная библиотека, кроме функции чтения куки, имеет также методы для её установки и удаления.

    Библиотека js-cookie

    js-cookie - библиотека JavaScript, предоставляющая методы для удобной работы с cookies.

    Подключение js-cookie к странице Установка (set) cookie Запись cookie осуществляется с помощью функции set: // name - ключ (имя) куки // value - значение, связанное с ключом name // attributes (необязательный параметр) - атрибуты куки в формате объекта Cookies.set("name", "value"[,attributes]); Установить cookie для всех страниц сайта: Cookies.set("nameCookie", "valueCookie"); // => "nameCookie=valueCookie; path=/" Создать cookie, действительную 30 дней (от текущего момента времени) и видимую любыми страницами сайта: Cookies.set("nameCookie", "valueCookie", { expires: 30 }); // => "nameCookie=valueCookie; path=/; expires=Thu, 13 Apr 2017 13:00:15 GMT" Выполнить запись куки, доступ к которой будет иметь только текущая страница (срок хранения 365 дней): Cookies.set("nameCookie", "valueCookie", { expires: 365, path: "" }); // => "nameCookie=valueCookie; expires=Wed, 14 Mar 2018 13:00:36 GMT" Получение (get) куки Чтение значения cookie осуществляется с помощью метода get: Cookies.get("nameCookie"); // => "valueCookie" Cookies.get("otherCookie"); // => undefined Получить все доступные cookies: Cookies.get(); // => {nameCookie: "valueCookie"} Удаление (remove) cookie Для удаления куки предназначена функция remove: Cookies.remove("nameCookie"); Удаление cookie с указанием атрибута path: Cookies.set("name", "value", { path: "" }); Cookies.remove("name", { path: "/" }); // не получится (не правильный путь) Cookies.remove("name", { path: "" }); // удалится (указан правильный путь)

    Важно! Когда вы удаляете cookie, вы должны указать тот же самый путь и домен, который использовался для установки cookie. Если атрибуты куки в Cookies.remove не указать, то будут браться те, которые заданы по умолчанию в Cookies.defaults (приведён ниже).

    Например, удалим все cookies, имеющие в качастве пути значение "/": path = "/"; var cookies = Cookies.get(); for (var cookie in cookies) { Cookies.remove(cookie, { path: path }); } Установка атрибутов cookies Передача атрибутов при установке куки осуществляется посредством указания их в качестве значения последнего (3) аргумента функции Cookies.set . Cookies.set("name", "value", { expires: 365, path: "/news/", domain: "m.mydomain.ru", secure: true }); // => "name=value; path=/news/; expires=Wed, 14 Mar 2018 12:54:28 GMT; domain=m.mydomain.ru; secure"

    • expires - указывает длительность хранения cookie в браузере. Значение можно задавать как в формате числа (количество дней от текущего момента времени), так и ввиде даты. Если данный параметр не указать, то cookie будет ссесионным, т.е. он удалится после закрытия браузера.

      Например, установим cookie на 30 дней (в качестве формата expires будем использовать дату):

      // функция, возвращающая дату, которая будет через указанное количество дней от текущей function getDateExpires(days) { var date = new Date; date.setDate(date.getDate() + days); return date; } // запись cookie nameCookie=valueCookie Cookies.set("nameCookie", "valueCookie", { expires: getDateExpires(30) }); // => "nameCookie=valueCookie; path=/; expires=Thu, 13 Apr 2017 12:34:13 GMT"

    • path - строка, указывающая путь (по умолчанию: / ), посредством которого будет определяться видимость (доступность) cookie. Cookie для некоторой страницы доступна только тогда, когда её path входит в адрес. По умолчанию куки видимы для всех страниц сайта.

      Cookie, которая будет иметь в качестве пути текущее местоположение документа:

      Cookies.set("nameCookie", "valueCookie", { path: "" }); // => "nameCookie=valueCookie"

    • domain - строка, указывающая домен (по умолчанию: текущий), в котором cookie должна быть видна. При этом куки также будут доступны во всех поддоменах этого домена.
    • secure - устанавливает, необходимо ли при передаче cookies использовать безопасный протокол (https). По умолчанию: false (нет не требуется).
    • Кроме индивидуальной установки атрибутов куки при каждом вызове функции Cookies.set , их также можно назначить глобально посредством свойства defaults объекта Cookie . Cookies.defaults = { path: "/", expires: 365 }; Cookies.set("nameCookie", "valueCookie"); // => "nameCookie=valueCookie; path=/; expires=Wed, 14 Mar 2018 12:53:23 GMT" Данные атрибуты будут использоваться функцией Cookies.set по умолчанию. Другими словами только тогда, когда вы вызываете функцию Cookies.set без последнего (третьего) параметра.
    Куки и формат JSON

    Библиотека js-cookie позволяет очень просто установить в качестве значения куки не только текстовое значение, но и данные в формате массива или объекта (а точнее их строковое представление посредством JSON.stringify):

    Cookies.set("name", { name1: "value1", name2: "value2" });

    Выполнять чтение cookie (имеющей в качестве значения JSON) с помощью функции Cookies.get не очень удобно, т.к. на выходе вы получите обычную строку (а не массив или объект).

    Cookies.get("name"); // => "{"name1":"value1","name2":"value2"}" Cookies.get(); // => {name:"{"name1":"value1","name2":"value2"}"}

    Для этого можно воспользоваться функцией Cookies.getJSON . Данная функция не только получает cookie, но и разбирает её с помощью JSON.parse:

    Cookies.getJSON("name"); // => {name1: "value1", name2: "value2"} Cookies.getJSON("name")["name1"]; // => "value1" Cookies.getJSON("name")["name2"]; // => "value2" Cookies.getJSON(); // => {name: {name1:"value1", name2:"value2"}}

    Как включить куки и JavaScript?

    Куки (англ . cookies) - это текстовая информация, в которой, обычно, хранятся индивидуальные настройки пользователя на конкретном сайте. Применяется для сохранения данных на стороне пользователя, на практике обычно используется для:

    • аутентификации пользователя;
    • хранения персональных предпочтений и настроек пользователя;
    • отслеживания состояния сессии доступа пользователя;
    • ведения статистики о пользователях.

    Она не может быть доступна никакому другому сайту, кроме того, для которого создавалась. Эта информация не является запускаемым кодом и поэтому не несет никакой угрозы безопасности компьютера. Занимает она обычно столь ничтожный объем, что и говорить не стоит.
    HTTP-Cookie

    JavaScript - это инструмент, позволяющий создать на сайте несложные динамические элементы или автоматизацию. Выполняется он браузером, как и текстовый код веб-страницы, обладает достаточно небольшим и стандартизованным набором возможностей, поэтому при его включении безопасность работы страницы практически не меняется.
    JavaScript

    Для работы с нашим сайтом требуется разрешенное выполнение JavaScript и возможность записи файлов cookies. По умолчанию обе функции разрешены, и большинству пользователей не требуется делать ничего специального. Если же у вас возникли проблемы, значит кто-либо настроил ваш браузер «под себя», отключив у вас одну или обе возможности. Для дальнейшей работы с сайтом Вам требуется их включить.

    Нажмите кнопку «Инструменты» и выберите пункт «Настройки» .

    На вкладке «Приватность» в области «Firefox:» выберите параметр «будет использовать ваши настройки хранения истории»
    Снимите флажок для параметра «Автоматически запускать Firefox в режиме приватного просмотра» и установите флажок для параметров: «Принимать куки с сайтов» и «Принимать куки со сторонних сайтов» , затем нажмите «OK»

    В появившемся окне выбирите пункт «Содержимое» . Убедитесь, что около надписи «Использовать JavaScript» установлена галочка, если нет - поставьте.

    Теперь нажмите кнопу «OK» и перезагрузите браузер.

    Нажмите кнопку «Меню» и выберите пункт «Настройки».

    На вкладке «Расширенные» в области «Cookies» выберите параметр «Принимать cookies» .
    В области «Содержимое» установите галочку «Включить JavaScript» .

    Нажмите кнопу «OK» и перезагрузите браузер.

    Internet Explorer 8

    Нажмите кнопку «Сервис» и выберите пункт «Свойства обозревателя» .

    По умолчанию функции выполнения JavaScript и возможность записи файлов cookies разрешены, и большинству пользователей не требуется делать ничего специального. Проверьте установки и, если это необходимо, восстановите их.

    Щелкните вкладку «Конфиденциальность» и затем в области «Параметры» нажмите кнопку «По умолчанию» или установите ползунок, как показано на рисунке.
    На вкладке «Безопасность» повторите те же действия.

    Нажмите кнопку «OK» и перезагрузите браузер.

    Нажмите кнопку «Настройка и управление Google Chrome» и выберите пункт «Параметры»

    Всем доброго времени суток и поехали. Чем же хороши куки? Да тем, что с помощью их мы можем хранить информацию на стороне клиента, то есть в его браузере. Более того мы хранить информацию определенное количество времени после истечения которого данная информация стереться.

    Для начала давайте разберемся включены ли у вас куки в браузере, так как их можно отключать.

    Делается это очень просто.

    If (navigator.cookieEnabled) { alert("В вашем браузере Cookie включены"); }else{ alert("Включите пожалуста cookie"); }

    здесь мы через объект navigator проверяем включены ли в вашем браузере cookie. Если да то едем дальше.

    Для того чтобы получить все cookie нам достаточно прописать:

    Console.log(document.cookie);

    C помощью свойства cookie объекта document мы получаем список всех наших доступных кук и выводим их в консоль. У меня к примеру кук пока нет, поэтому мне возвращается пустая строка.

    Давайте создадим свою первую куку. Сделать это можно довольно просто:

    Document.cookie = "myFirstCookie=Hello world!";

    Поздравляю мы создали куку. Cookie как правило лучше создавать в виде пары имя куки и ее значения. Здесь у нас именем является myFirstCookie, а значением строка Hello world!. Почему так стоит делать? Да потому что, если у нас кук несколько и нам необходимо получить значение одной из них, мы это можем сделать через ее имя.

    Имя как бы является указателем через который мы можем обратится к нашей куке и получить ее значение. Пример:

    Document.cookie = "two=ok!"; console.log(document.cookie);

    здесь мы создали еще одну куку и вывели все наше дело в консоль. В результате у нас в консоли вывелась строка с двумя нашими куками.

    myFirstCookie=Hello world!; two=ok!

    И теперь давайте напишем небольшую функцию с помощью которой мы можем получать значение определенной куки.

    Function getCookie(name){ var arrayAllCookie = document.cookie.split("; "); for(var i in arrayAllCookie){ if(arrayAllCookie[i].split("=") === name){ return arrayAllCookie[i].split("=") } } } console.log(getCookie("myFirstCookie"));

    Мы создали функцию getCookie в качестве аргумента которой передаем имя куки значение которой хотим получить.

    В результате мы получили Hello world!, то есть значение нашей первой куки, так как в качестве аргумента у нас указано ее имя.

    Помимо всего прочего мы можем задавать время работы куки после истечения которого она будет удалена, к примеру:

    Var date = new Date(new Date().getTime() + 10 * 1000); document.cookie = "three=My three cookie; path=/; expires=" + date.toUTCString();

    Здесь мы в переменную date запысиваем время когда наша кука будет удалена. В нашем случае она будет удалена через 10 секунд после создания.

    Далее при создании куки устанавливаем ей имя three и значение "My three cookie", после пишем следующее "path=/; expires=" и указываем нашу переменную, приведенную к специальному формату UTC, с помощью метода toUTCString().

    В результате время работы куки будет равно 10 секундам после истечения которых она будет не действительна(удалена).

    Если мы хотим удалить куку вручную, допустим давайте удалим куку myFirstCookie:

    Console.log("Результат до: "+document.cookie); var date = new Date(0); document.cookie = "myFirstCookie=; path=/; expires=" + date.toUTCString(); console.log("Результат после: "+document.cookie);

    Как видите мы просто выставили текущее время в качестве окончания работы куки в результате чего она была удалена. Заметье что мы указали только имя куки и знак равно упустив значение. И в результате вывели список кук до удаления и после. Как видите мы успешно удалили куку с именем myFirstCookie.

    Function setCookie(name, value="",date="") { if(value == "" && date == ""){ /*Если передан один аргумент мы удаляем куку с указанным именем*/ var date = new Date(0); document.cookie = name+"=; path=/; expires=" + date.toUTCString(); return false; } if(date == ""){ /*Если передано два параметра создаем куку с заданными именем и значением, также можно используя имя уже созданной куки менять ее значение*/ document.cookie = name+"="+value; return false; } /*Если переданы все три параметра, то мы также можем создавать куку и менять ее значения, в том числе третим параметром устанавливается время ее жизни в секундах*/ var date = new Date(new Date().getTime() + date * 1000); document.cookie = name+"="+value+"; path=/; expires=" + date.toUTCString(); }

    Итак, весь код в функции я тщательно прокомментировал, поэтому пользуйтесь на здоровью.

    Этого вам вполне может быть достаточно для работы с куками. Напоследок скажу что не стоит хранить в качестве значений кук пароли, ключи, номера кошельков и прочие персональные данные которые представляют для вас ценность. Так как их вполне можно достать удаленно.

    Берегите вашу личную информацию!

    Они больше подходят для хранения динамических данных которые вы хотите чтобы сохранялись после перезагрузки страницы. Также их часто используют для идентификации пользователей.

    На этом у меня все. Надеюсь я смог вам помочь в решении вашего вопроса. Желаю успехов и удачи! Пока!

    Подготовил: Андрей Косяк Дата публикации: 22.12.2010

    В первой статье Cookies — печем печеньки мы смотрели на куки с дальней дистанции, поэтому если ты разобрался в общих понятиях и назначении cookies — можно приступать непосредственно к выпечке (вот и духовочку я раздобыл), поэтому, надеваем кулинарный колпак и подходим поближе. Будем выпекать!

    Арт. подготовка

    Ты уже знаешь, что куки — строка, а также, знаешь, как выглядит кука глазами браузера. При установке в браузер, кука имеет вид все той же строки:

    "cookieName = cookieValue; expires = Fri, 21 Jan 2021 06:10:00 GMT; path = /; domain = lessons.сайт; secure = true; "

    Условия существования куки оговариваются пятью параметрами (парами ключ=значение) (ВАЖНО! После каждого должен стоять символ-разделитель ";"), рассмотрим их:

    Начинка куки

    "cookieName =cookieValue;" — основной параметр куки, без него кука теряет свой смысл. Здесь cookieName — уникальное имя для куки, а cookieValue — информация (значение), которую она будет хранить. Забегая немного вперед, скажу, что в качестве значения может быть что угодно, любая, удобная тебе, структура хранимых данных (да хоть JSON), а также какие угодно символы. Единственная пара, которая является обязательной при установке куки.

    Время жизни

    "expires =Fri, 21 Jan 2021 06:10:00 GMT" — эта пара хоть и необязательна, но играет очень важную роль, наряду с первой. Этот параметр определяет время жизни куки, а именно, с точностью до секунды, в указанную дату, кука «прикажет долго жить». Если этот параметр не указать, то кука будет действительна только в течение сессии, а это значит, что при закрытии браузера она будет удалена.

    Важным моментом является формат даты. Дата должна быть задана ТОЛЬКО в текстовом формате (Fri, 21 Jan 2021 06:10:00 GMT). Снова, забегая немного вперед, скажу, что в этом нам поможет объект Date, в нем есть все необходимые инструменты.

    Путь установки

    "path =/" — этим параметром задается путь (каталог), для которого действительна кука. Сейчас path имеет значение "/", это ничто иное, как корневой каталог, поэтому кука будет доступна для чтения абсолютно всем каталогам сайта. В случае если доступ к куке должен быть ограничен, то параметр path просто не указываем или указываем в нем общий родительский каталог, и кука будет установлена для конкретного каталога, но специфика такова, что кука будет доступна всем его подкаталогам, в то же время — не видна смежным и родительским каталогам.

    Для чего это? Представим элементарную ситуацию: интернет-кафе, сначала пришел пользователь Вася, поработал со своей страницей в соцсети, а после него пришел Петя и, на том же компьютере, в той же сети, поработал со своей страницей. Страницы участников находятся в одном домене, но лежат, как правило, в смежных каталогах. К примеру: страница Васи — http://socset.com/vasya, страница Пети — http://socset.com/petya. Можно представить, какой будет хаос, если куки будут устанавливаться в корневой каталог: Вася сможет оперировать куками Пети и наоборот. Я думаю ни одному, ни другому такой вариант не понравится. Поэтому, в данном случае, будет уместно, если куки будут привязаны только к каталогу конкретного пользователя, следовательно, ко всем его подкаталогам.

    Домен

    "domain =lessons.сайт" — эта пара определяет домен, в котором действительны куки. Как правило, явно использовать приходится редко. Ситуация с этим параметром похожа на ситуацию с параметром path, с той разницей, что в Domain мы оперируем доменами и сабдоменами а не каталогами. Т.е., в данном случае, куки установленные для сабдомена lessons..сайт.. Если параметр не указан, то по умолчанию используется доменный адрес документа.

    Безопасность

    "secure =true" — параметр безопасности. Если этот параметр установлен в true, браузер отправит куки только тому серверу, который запросит их по безопасному каналу (SSL). Этот параметр также используется редко. По умолчанию принимает значение false.

    Первый блин комом?

    Вот теперь попробуем угостить наш браузер печенюшкой. В этом нам поможет объект document.cookie:

    Document.cookie = "firstCookie=Первый блин комом?; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;";

    Результат можно увидеть, открыв в своем браузере раздел куки или же банально:

    Document.cookie = "firstCookie=Первый блин комом?; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;"; alert(document.cookie);

    И совсем и не комом! Все гуд, кука на месте.

    Заметка

    Обращаю внимание на особенность браузеров на WebKit. Они отказываются ставить куки, если документ открыт локально. Я, обычно, в таких случаях пользуюсь локальным сервером, так же он понадобится при работе с AJAX. Поэтому, как говорится, маст хэв! К примеру, Denwer (ссылка в конце статьи).

    Больше cookies

    C одной кукой разобрались. А как быть, если нужно хранить, к примеру, данные из формы (логин, e-mail, номер телефона и т.п.)? В таком случае можно поступить так:

    Document.cookie = "myLogin=Мой логин; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;"; document.cookie = "[email protected]; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;"; document.cookie = "myPhone=1234567; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;";

    Таким образом, имеем три куки, которые хранят соответственно логин, электронный ящик и номер телефона. Но ты же помнишь, об ограничениях на количество куков от одного домена, впрочем, как и их общего количества? Значит, таким способом мы можем хранить только ограниченное количество значений для полей. А если такое ограничение "связывает" нам руки, мы можем поступить так:

    Var formData = escape("Мой логин;[email protected];1234567"); document.cookie = "myFormCookie="+formData+"; expires=Fri, 21 Jan 2021 06:10:00 GMT; path=/;";

    В итоге имеем 1 используемое место под куку. Все данные я "склеил" в одну переменную и разделил их символом ";", впрочем, в качестве разделителя внутри переменной можно использовать любой символ, это уже наша инициатива, здесь только нужно позаботиться о том, чтоб этот разделитель не встречался в значениях полей, иначе возникнут трудности в дальнейшем, когда нужно будет их прочесть. В таком случае, конечно же, нужно еще помнить об ограничении на размер куки (4кб).

    Зачем функция escape? Все довольно просто, она кодирует значение куки в 16-ричное представление. Для чего? Во-первых, браузер отправляет куки серверу, а для того, чтоб данные одинаково могли быть прочтены на серверах под любыми системами, используется данная кодировка. Во-вторых, если мы, используя разделитель ";" в переменной со значениями полей, не закодируем эту строку, то кука, по меньшей мере, просто не правильно установится, ведь разделитель ";" используется для отделения параметров самой куки. Этот момент нужно взять на вооружение и, впредь, использовать по-умолчанию при передаче информации (cookie, AJAX).

    "…и время ни на миг не остановишь"

    Теперь разберемся с параметром expires. Неудобство в том, что до этого момента мы прописывали время жизни для куки вручную. Но, в реальных условиях, такой подход практически не применим. Как минимум, потому, что при каждом очередном заходе на сайт, время жизни куков должно продлеваться на какой-то фиксированный строк, что, вобщем-то, оправдано и логично. Поэтому в данном вопросе нам полностью поможет объект Date:

    Var formData = escape("Мой логин;[email protected];1234567"); cookieExp = new Date(); // создаем объект Date cookieExp.setMonth(cookieExp.getMonth()+1); // устанавливаем текущий месяц и к нему добавляем еще один document.cookie = "myFormCookie="+formData+"; expires="+cookieExp.toGMTString()+"; path=/;";

    Такими действиями мы установили время жизни куки ровно в 1 месяц. Подробно на объекте Date в этой статье оснавливаться не буду, лишь опишу схему установки срока:

    • строка 2: объявляем cookieExp как объект Date. Теперь cookieExp содержит текущую дату;
    • строка 3: переустановка в cookieExp месяца. При помощи метода getMonth извлекаем текущий месяц и прибавляем к нему еще один. В итоге в cookieExp запишется следующий месяц;
    • строка 6: в этой строке используем метод toGMTString(), для перевода даты в текстовый формат;

    Таким образом, в зависимости от того, какое время жизни для куки нужно установить, можно использовать и другие методы объекта Date: от get/setMilliseconds() до get/setFullYear() (от получения/установки миллисекунд до получения/установки года).

    Остальные параметры наглядно демонстрировать нет смысла, к тому же, их значения по умолчанию в подавляющем количестве случаев тебя вполне устроят.

    Вывод

    Как видишь, установка куков не есть чем-то сверхъестественным, нужно только помнить (какой раз уже повторяюсь:)) об ограничениях и все будет типи-тип, ну, или топи-топ. Следующий материал будет о том, как наши печеньки достать из духовочки. Вот там придется немного поразмышлять.

    Куда дальше
    • следующая — Cookies — извлечение
    • предыдущая —


    Рекомендуем почитать

    Наверх