Создание cookies. Методы похищения файлов cookie. Установка cookie в PHP

Всем привет!

JS не предоставляет удобного API для работы с cookies. И это в принципе не плохо, могло бы быть и хуже (например js вообще не реализовывал бы работы с куками), но все же, лучше, когда можно читать куки с помощью одной инструкции (чего пока нативным js - невозможно).

Существует множество framework"ов и plugin"ов к ним, которые восполняют данный недостаток. Однако бывают проекты где нецелесообразно подключать framework лишь для удобства работы с куками.

Собственно мною была поставлена и реализована задача создания методов по управлению куками, с красивыми аксессорами типа:

Cookie.set("bla", "blabla");
cookie.get("bla");

code.google.com/p/jscookie - страничка на гуглокоде

Немножечко теории о механизме предоставляемом js"ом для работы с cookie:

Все что у нас есть - свойство document.cookie, оно не реализует за собой никаких привычных рядовому программисту методов, типа document.cookie.get("bla");

Чтение cookie document.cookie содержит набор значений cookie_name=cookie_value; (разделенных между собой "; " (точка с запятой плюс пробел)), отсюда следует, что бы получить значение конкретной куки - необходимо пропарсить всю строку и выдернуть необходимые данные. Что примечательно, в свойстве содержится пары имя=значение, никаких дополнительный данных о куках таких как: expires time, path, domain, secure - не содержит.Создание/обновление cookie document.cookie ведет себя как строка, но не обычная. представим что у нас есть 2 куки key1 = val1 и key2 = val2.

Alert(document.cookie) //key1=val1; key2=val2;

Для того что бы добавить новую куку key3 = val3

Document.cookie= "key3=val3; ";
alert(document.cookie) //key1=val1; key2=val2; key3=val3;

Для того что бы обновить куку, зададим key2 значение hello world

Document.cookie= "key2=hello world; ";
alert(document.cookie) //key1=val1; key2=hello world; key3=val3;

Удаление Cookie Теперь немножечко расскажу о куках как таковых, не претендую на полное и досканальное знание этой тематики, просто чуть чуть расскажу что знаю.

Кука помимо названия и значения имеет в своем арсенале еще несколько важных свойств, а именно:

Expires - время, после которого кука удаляется.
domain - домен для которого кука действительна, грубо говоря, если кука была создана на домене js.com, то ни на каком другом домене она не будет видна.
path - множество документов, при запросе на которые браузер будет посылать куку
secure - свойство-флаг разрешающий посылать браузуру куку только при https соединении

Вообщем все это записывается в виде document.cookie = "key4=val4;

Фокус с удалением куки состоит в том что бы обновить куку со свойством expires указывающим в прошлое, например:

Document.cookie= "key2=; expires=Mon, 05 Jul 1982 16:37:55 GMT; ";
alert(document.cookie)//key1=val1; key3=val3;

Собственно все

UPD: это мой первый пост, прошу сильно не пинать. Надеюсь кому то будет полезно

Последнее обновление: 1.11.2015

Cookie (куки) представляют небольшие наборы данных (не более 4 кБайт), с помощью которых веб-сайт может сохранить на компьютере пользователя любую информацию. С помощью куки можно отслеживать активность пользователя на сайте: залогинен пользователь на сайте или нет, отслеживать историю его визитов и т.д.

Сохранение cookie

Для сохранения куки на компьютере пользователя используется функция setcookie() . Она имеет следующее определение:

Bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);

Функция setcookie() может принимать следующие параметры:

    name: имя cookie, которое будет использоваться для доступа к его значению

    value: значение или содержимое cookie - любой алфавитно-цифровой текст не более 4 кБайт

    expire (необязательный параметр): срок действия, после которого cookie уничтожаются. Если данный параметр не установлен или равен 0, то уничтожение cookie происходит после закрытия браузера.

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

    domain (необязательный параметр): задает домен, для которого будут доступны cookie. Если это домен второго уровня, например, localhost.com , то cookie доступны для всего сайта localhost.com, в том числе и для его поддоменов типа blog.localhost.com .

    Если задан поддомен blog.localhost.com , то cookie доступны только внутри этого поддомена.

    secure (необязательный параметр): указывает на то, что значение cookie должно передаваться по протоколу HTTPS. Если задано true , cookie от клиента будет передано на сервер, только если установлено защищенное соединение. По умолчанию равно false .

    httponly (необязательный параметр): если равно true , cookie будут доступны только через http протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, например, JavaScript. По умолчанию параметр равен false

Сохраним cookie:

$value1 = "Сингапур"; $value2 = "китайский"; setcookie("city", $value1); setcookie("language", $value2, time()+3600); // срок действия 1 час

Здесь устанавливаются две куки: "city" и "language". Первая куки уничтожается после закрытия браузера, а вторая - через 3600 секунд, то есть через час

Получение cookie

Чтобы получить cookie, можно использовать глобальный ассоциативный массив $_COOKIE , например, $_COOKIE["city"] . Так, получим ранее сохраненные куки:

If (isset($_COOKIE["city"])) echo "Город: " . $_COOKIE["city"] . "
"; if (isset($_COOKIE["language"])) echo "Язык: " . $_COOKIE["language"];

Сохранение массивов в cookie

Сохранение в куки массивов имеет некоторые особенности. Например, сохраним следующий массив:

Setcookie("lan", "PHP"); setcookie("lan", "C#"); setcookie("lan", "Java");

Теперь получим его и выведем на страницу:

If (isset($_COOKIE["lan"])) { foreach ($_COOKIE["lan"] as $name => $value) { $name = htmlspecialchars($name); $value = htmlspecialchars($value); echo "$name. $value
"; } }

Удаление cookie

Для удаления cookie достаточно в качестве срока действия указать какое-либо время в прошлом:

Setcookie ("city", "", time() - 3600);

Последнее обновление: 1.11.2015

Одну из возможностей сохранения данных в javascript представляет использование куки. Для работы с куками в объекте document предназначено свойство cookie .

Для установки куков достаточно свойству document.cookie присвоить строку с куками:

document.cookie = "login=tom32;";

В данном случае устанавливается кука, которая называется "login" и которая имеет значение "tom32". И в большинстве браузеров мы можем посмотреть ее, узнать всю информацию о ней и в дальнейшем ее можно использовать в приложении:

Строка куки принимает до шести различных параметров: имя куки, значение, срок окончания действия (expires), путь (path), домен (domain) и secure. Выше использовались только два параметра: имя куки и значение. То есть в случае со строкой "login=tom32;" куки имеет имя login и значение tom32.

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

И в этом случае нам надо установить параметр expires , то есть срок действия куков:

То есть срок действия куки login истекает в понедельник 31 августа 2015 года в 00:00. Формат параметра expires очень важен. Однако его можно сгенерировать программно. Для этого мы можем использовать метод toUTCString() объекта Date:

Var expire = new Date(); expire.setHours(expire.getHours() + 4); document.cookie = "login=tom32;expires=" + expire.toUTCString() + ";";

В данном случае срок действия куки будет составлять 4 часа.

Если в друг нам надо установить куки для какого-то определенного пути на сайте, то мы можем использовать параметр path . Например, мы хотим установить куки только для пути www.mysite.com/home :

В этом случае для других путей на сайте, например, www.mysite.com/shop , эти куки будут недоступны.

Если на нашем сайте есть несколько доменов, и мы хотим установить куки непосредственно для определенного домена, тогда можно использовать параметр domain . Например, у нас на сайте есть поддомен blog.mysite.com :

Document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/;domain=blog.mysite.com;";

Параметр path=/ указывает, что куки будут доступны для всех директорий и путей поддомена blog.mysite.com.

Последний параметр - secure задает использование SSL (SecureSockets Layer) и подходит для сайтов, использующих протокол https. Если значение этого параметра равно true , то куки будут использоваться только при установке защищенного соединения ssl. По умолчанию данный параметр равен false.

Document.cookie = "login=tom32;expires=Mon, 31 Aug 2015 00:00:00 GMT;path=/;domain=blog.mysite.com;secure=true;";

Получение куки

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

Var expire = new Date(); expire.setHours(expire.getHours() + 4); document.cookie = "city=Berlin;expires="+expire.toUTCString()+";"; document.cookie = "country=Germany;expires="+expire.toUTCString()+";"; document.cookie = "login=tom32;"; document.write(document.cookie);

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

Извлеченные куки не включают параметры expires, path, domain и secure . Кроме того, сами куки разделяются точкой с запятой, поэтому нужно еще провести некоторые преобразования, чтобы получить их имя и значение:

Var cookies = document.cookie.split(";"); for(var i=0; i

Понравилась статья? Поделиться с друзьями: