Javascript как передавать значения в cookies. Методы похищения файлов cookie. Как работают cookies

Иногда требуется работа с cookie через JavaScript . Например, cookie может быть альтернативным вариантом обмена данными между PHP и JavaScript . Допустим, JavaScript записывает в cookie пользователя его текущее время на компьютере (то есть его местное время), а PHP эти данные считывает и учитывает смещение относительно серверного времени. А теперь давайте разберём, как работать с cookie через JavaScript .

Единственное, что есть в JavaScript для работы с cookie - это свойство cookie объекта document :


alert(document.cookie);

В результате запуска этого кода выведутся все cookie от данного сайта, причём в определённом формате. Выглядит это примерно так: "name=123; login=456 ". На что здесь стоит обратить внимание? На то, что все cookie имеют, разумеется, имя и значение, а сами cookie разделены друг с другом точкой с запятой и пробелом.

Зная этот формат, Вы можете легко вытащить значение нужной переменной.

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


document.cookie = "new=5";

Обратите внимание, что именно "= ", а не "+= ". В данном случае, Вы не стираете все существующие cookie , а добавляете новую переменную.

Что касается удаления cookie , то здесь можно использовать тот факт, что имеется возможность указать время жизни cookie . И если указать, что она должна была закончиться год назад, то cookie будет немедленно удалена.

Чтобы у Вас было полное представления о , показываю код всех 3 функций для управления cookie , а также пример их использования:


function setCookie(name, value) {
document.cookie = name + "=" + value;
}
function getCookie(name) {
var r = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)");
if (r) return r;
else return "";
}
function deleteCookie(name) {
var date = new Date(); // Берём текущую дату
date.setTime(date.getTime() - 1); // Возвращаемся в "прошлое"
document.cookie = name += "=; expires=" + date.toGMTString(); // Устанавливаем cookie пустое значение и срок действия до прошедшего уже времени
}
setCookie("firstname", "Вася"); // Устанавливаем cookie
alert(getCookie("firstname")); // Выводим cookie
deleteCookie("firstname"); // Удаляем cookie
alert(getCookie("firstname")); // Убеждаемся, что ничего не осталось

Вот такую простейшую библиотеку Вы можете использовать при работе с cookie через JavaScript .

Всем привет!

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: это мой первый пост, прошу сильно не пинать. Надеюсь кому то будет полезно

Я использовал Facebook login для идентификации пользователей. Когда приходит новый пользователь, я храню его идентификатор пользователя в своей базе данных. В следующий раз, когда они придут, я узнал их идентификатор Facebook, и я знаю, какой пользователь находится в моей базе данных.

теперь я пытаюсь сделать то же самое с OAuth2 от Google, но как я могу распознать пользователей?

Google отправляет мне несколько кодов и токенов (access_token, id_token, refresh_token), однако ни один из них не является постоянным. Это означает, что если я выйду из системы и вернусь через 2 минуты позже, все 3 значения изменились. Как я могу однозначно идентифицировать пользователя?

Я использую их клиентскую библиотеку PHP:https://code.google.com/p/google-api-php-client/

6 54

Nathan H

6 ответов:

как уже упоминалось, вы можете отправить GET to https://www.googleapis.com/oauth2/v3/userinfo , используя токен носителя OAuth2, который вы только что получили, и вы получите ответ с некоторой информацией о пользователе (id, имя и т. д.).

также стоит отметить, что Google реализует OpenID Connect и что эта конечная точка информации о пользователе является только одной ее частью.

OpenID Connect - это уровень аутентификации поверх OAuth2. При обмене авторизацией code в конечной точке токена Google вы получаете токен доступа (access_token параметр), а также маркер идентификатора OpenId Connect (

Последнее обновление: 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

При использовании Cookies необходимо иметь в виду, что Cookies должны устанавливаться до первого вывода информации в браузер (например, оперетором echo или выводом какой-либо функции). Поэтому желательно устанавливать Cookies в самом начале скрипта. Cookies устанавливаются с помощью определенного заголовка сервера, а если скрипт выводит что-либо, то это означает, что начинается тело документа. В результате Cookies не будут установлены и может быть выведено предупреждение. Для проверки успешности установки Cookies можно использовать такой метод:

Функция SetCookie() возвращает TRUE в случае успешной установки Cookie. В случае, если Cookie установить не удается SetCookie() возвратит FALSE и возможно, предупреждение (зависит от настроек PHP). Пример неудачной установки Cookie:

Cookie установить не удалось, поскольку перед посылкой заголовка Cookie мы вывели в браузер строку "Hello".

Чтение значений Cookies

Получить доступ к Cookies и их значениям достаточно просто. Они хранятся в суперглобальных массивах и $_COOKIE и $HTTP_COOKIE_VARS .

Доступ к значениям осуществляется по имени установленных Cookies, например:

echo $_COOKIE["my_cookie"];
// Выводит значения установленной Cookie "My_Cookie"

Пример установки Cookie и последующего его чтения:

В рассмотренном примере при первом обращении к скрипту устанавливается Cookie "test" зо значением "hello". При повторном обращении к скрипту будет выведено значение Cookie "test", то есть строка "Hello".

При чтении значений Cookies обращайте внимание на проверку существования Cookies, например, используя оператор isset() . Либо путем подавления вывода ошибок опереатором @

А вот пример, как построить счетчик числа загрузок страницы с помощью Cookies:

Удаление Cookies

Иногда возникает необходимость удаления Cookies. Сделать это несложно, необходимо лишь вновь установить Cookie с идентичным именем и пустым параметром. Например:

Установка массива Cookies и его чтение

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

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



>
Есть еще вопросы или что-то непонятно - добро пожаловать на наш