Cookie в PHP


Содержание

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

Cookie (куки) — это способ долговременного хранения данных в браузере пользователя.

К сожалению, в куки можно сохранить только 4 килобайта информации. Кроме того, есть ограничение на количество кук для данного домена.

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

Написать что-то в куки можно с помощью функции setcookie, которая первым параметром принимает имя этой куки, а вторым — значение:

Однако такие куки долго не живут — только до закрытия браузера.

Продлить время жизни куки можно с помощью третьего параметра, который принимает время (конкретную дату) окончания жизни куки в формате timestamp.


Для тех, кто не помнит, что это за формат — напоминаю: это количество секунд, прошедших с первого января 1970 года.

Однако устанавливать конкретную дату ‘смерти’ куки не очень удобно, так как дата установки этой куки всегда разная.

Поэтому третий параметр принято записывать так: настоящий момент времени + N секунд.

Настоящий момент времени в формате timestamp можно получить с помощью функции time. Примеры:

Куки можно прочитать с помощью глобального массива $_COOKIE.

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

Удаляют куки очень хитрым способом — устанавливая дату ‘смерти’ куки на текущий момент времени:

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Когда все решите — переходите к изучению новой темы.

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

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

Давайте создадим какой-нибудь куки (cookie).

Вышеописанный cookie обозначает: мы устанавливаем cookie с именем visited . Значение переменной visited – yes (то есть в дальнейшем данный пользователь будет идентифицироваться как – ‘он сайт уже посещал’). Наш куки будет работать в течение месяца (60 * 60 * 24 * 30) . Вы можете видеть, что путь и домен не указаны, поэтому они будут установлены автоматически. Следует отметить: если вы не установите время действия куки, то куки будет действовать в течение текущей сессии. Хотя данный сценарий и установит куки, но сервер не сможет прочитать его, пока пользователь не перезагрузит текущую страницу или не перейдет к другой странице.

Так как функций setcookie устанавливает HTTP-заголовки, то до вывода данной функции ваш сценарий не должен ничего выводить в браузере, включая пробелы (пробельные символы интерпретируются как HTML-код).

Чтобы обратиться к куки, можно использовать массив $_COOKIE :

Чтобы удалить cookie достаточно измените переменную expire следующим образом:

Куки часто используют в голосованиях: когда пользователь голосует, файл обработчик назначает cookie с информацией о том, что пользователь уже голосовал. Затем при новом заходе на сайт пользователь не имеет возможности голосовать повторно (куки ведь ему уже назначено), хотя такой метод довольно легко обойти.

Сервер ставит куку

Браузер передает куку

Зависит от времени жизни куки

Заметки (замечания) по кукам

Куки посылаются туда-сюда в заголовках.

‘Туда’ или в браузер кука посылается посредством – setcookie (установили), ‘обратно’ cookie (обратиться к кукам можно посредством массива $_COOKIE ).

Сессионые(временные) куки: под сессией понимается то время, пока открыт браузер пользователя; как только браузер закроют, сессионная кука удалится. Если в setcookie не указать время — это сессионная кука (пока открыт браузер).

Куки посылаются в заголовках, поэтому они должны быть до любого вывода.

Сейчас куки используются в основном для отслеживания посещаемости(то есть не массово) и т.д.

Следующая сессионая кука считает количество посещения и выводит дату последнего визита.

В этой статье я расскажу вам о том, что такое Cookie (в переводе с английского — печенье, к слову об изображении), как их используют, насколько они важны в современном Рунете и как с ними работать средствами PHP.

Теперь немного сухой, но обязательной информации, которая после будет объяснена на примерах)

Cookie — это набор данных (сохраняемый как текстовый файл), который создаётся web-сервером и который отсылается при каждом обращении к серверу. Cookie хранятся в браузере пользователя и составляются для определённого сайта.

Куки, как правило, используют для хранения технических данных пользователя (кэш уникального id для автоматического входа на сайт, личные настройки и статистики), интернет-ресурсу (что смотрел, что нажимал) и общим данным по предпочтениям (например любит сайты, посвящённые автомобилям, а значит ему можно показывать соответствующую рекламу на других сайтах — обращали внимание на такое? Это cookie). Куку удаляют в основном двумя способами: средствами PHP и самостоятельной чисткой пользователя кук своего браузера.

Первое и самое главное — запись куки в браузер. Ниже приведены примеры записи, продления, сокращения на PHP.
Для записи, продления, сокращения срока действия куки используется setcookie.


Как проверить, записалось ли значение для cookie?

В последнем примере при выводе куки мы используем специальный для этого массив $_COOKIE.

Для удаления куки используется также setcookie или unset.

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

Илон Маск рекомендует:  21 ошибка программиста php

Смотрим результат работы. После демонстрации обязательно прочитайте описание работы кода.

Код и его логика простые. В верхней части мы создали функции-обработчики: вывод формы для входа, проверка соответствия данных (если успех, то возвращает true, если данные не совпадают, то — false):

В качестве логина — admin, пароля — 12345

После этого производим запись куки.

Обратите внимание на $_SERVER[SCRIPT_NAME] (можно заменить на $_SERVER[REQUEST_URI]). Эта константа содержит путь к текущему файлу. В результате обработки формы (значение атрибута action) обращается по этому же пути, к этому файлу.

Следом идёт проверка отправки формы (передавались ли значение log, то есть нажимали ли кнопку Войти). Если да, то проверяются данные login и pass. Стоит обратить внимание, что пароль не передаётся в чистом виде, а зашифровывается встроенной в PHP функцией шифрования данных md5().

Пароли шифруются затем, чтобы злоумышленник не смог посмотреть куки вашего браузера и увидеть их в исходном виде. Существуют функции Java Script ( что такое JS? ), которые позволяют беспрепятственно посмотреть ваши куки. В зашифрованном виде они не будут представлять особого интереса.

Сравнение пароля в данном скрипте происходит по модели шифруем(пароль из формы) совпадает ли с шифруем(пароль по умолчанию). Если проверка прошла успешно, то получаем true и далее происходит запись в cookie. Если нет, то выводится сообщение — Вы ввели неверные данные. Пожалуйста, попробуйте ещё. И вновь выводим форму авторизации с HTML-тегами.

PHP печеньки — создаём, читаем, удаляем

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

Куки очень полезны для хранения информации непосредственно в самом браузере пользователя. Это простой текстовый файл , который хранит максимум 4кб данных .

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

Зачастую в куках хранятся логины, пароли и прочее. Например вы заходите на сайт, вводите свой логин и пароль. Сайт автоматом создаёт у вас куки с этими данными. И при следующем посещении сайта, он просто проверяет наличие кук, и подгружает данные сохранённого в них пользователя.

HTTP является протоколом без запоминания состояний запросов , так что нет никакого способа , чтобы отслеживать предыдущие действия пользователя на сайте. Cookie’s являются лучшим способом для хранения данных. Все знаю про печеньки желаний, которую ты разламываешь, а внутри бумажка с тем, что возможно с тобой произойдёт в будущем. Как по мне так именно от сюда и растут ноги, по поводу названия.

PHP Куки

Собственно так как я уже объяснил что это такое давайте узнаем, как установить куки в PHP.

Используем SetCookie() метод для установки куки в пользовательском браузере.

Синтаксис для установки куки в PHP

name — Определяет имя куки.

val — Значение которое мы хотим хранить в куки. Куки всегда хранит значение строки.

time (необязательный параметр) — Установить время истечения срока действия куки. Если это поле пусто , то куки будут удалены при закрытии браузера.

domain (необязательное поле) — Установите область , в которой кука доступна. Если вы хотите установить кук для нескольких поддоменов , а затем использовать имя основного домена с точкой в качестве префикса.

Пусть my.com имеет несколько поддоменов , таких как tech.my.com, only.my.com. И я хочу чтобы кука установленная в my.com была доступна для всех моих поддоменов, то я устанавливаю домен как .my.com .

secure(необязательное поле) — Это Определяет , должно ли печенье передаваться через защищенное соединение по протоколу HTTPS. По умолчанию установлено как FALSE. Если это установить тру, то это означает, что кука будет установлено только если защищенное соединение существует, и логично что при HTTP создана не будет.

При помощи скрипта выше у нас создастся кука с именем login и с значением valera123.

Примечание: Куки может хранить только строковые значения. Они не могут хранить массив. Для того, чтобы сохранить массив в куки, вам нужно сначала преобразовать их в строку. Об этом я обязательно расскажу позже.

Примечание: Как вы заметили, я не установил время жизни нашей печенюхи. Именно по этому она исчезнет после того, как наш браузер будет закрыт.

При помощи SetCookie() метода будет установлена наша кука. После того, как выполнился ваш скрип, имеющий указанный метод, можете без проблем проверить куку в панели разработчика в хроме, ну или в фаербаге в firefox.

Мы не определили время истечения срока жизни куки. Зададим ей 30 дней. В этом случае, мы должны упомянуть о времени. После этого она будет жить в течение 30 дней, пока пользователь не удалит её вручную.

3600 — 1 час
24 — сутки
30 — дней


Как установить куки для субдоменов

Ну собственно данный пример уже приводился

Как получить значение куки в PHP

$ _COOKIE — используется для получения значения куки. Ниже приведён код как именно можно получить значение печеньки, установленной ранее.

Чтобы удалить куки в PHP, установите отрицательное время (прошедшее время).

Так что же происходит, если мы устанавливаем отрицательное время. В этом случае, кука истекает автоматически.

1. Кука может хранить максимум до 4 Кбайт данных.

2. Она может хранить только строки.

3. Cookies могут быть доступны только в браузере, который установит их. Cookie установленные в браузере Chrome не могут быть доступны в браузере Mozilla, или каком либо другом.

4. Старайтесь избегать хранения конфиденциальных и особо секретных данных в куки.

Собственно на этом всё. Я очень надеюсь, что вам понравилась данная строка, делитесь своим мнением в комментариях, а так же не забывайте делать репосты.

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

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

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

Существует два способа работы с cookie : со стороны сервера (PHP, ASP и т.д.), и на стороне пользователя (JavaScript). В данном микро-руководстве мы собираемся рассмотреть, как файлы cookie создаются и читаются в обоих случаях, и на PHP, и на JavaScript.

Настройка файлов cookie

Для создания cookie в PHP, необходимо использовать функцию setcookie . Она принимает целый ряд параметров (все, за исключением первого, являются необязательными и могут быть пропущены):

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

Параметр “/” указывает на то, что он будет доступен для всех каталогов домена (дополнительно, файл cookie можно привязать к одному из каталогов – например, /admin/ — в качестве параметра).

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

Первый указывает на то, что cookie будет передаваться только через безопасное HTTPS-соединение, а второй, что файлы cookie не будут доступны через JavaScript (применяется в PHP 5.2).

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

Способ чтения cookie при помощи PHP самый простой. Все cookie , которые были переданы в скрипт, доступны в суперглобальном массиве $_COOKIE . В нашем случае, для чтения cookie нам нужно написать следующий код:

Илон Маск рекомендует:  MCC-коды операций по платежным картам

Это хороший пример, чтобы обратить внимание: cookie , которые установлены с помощью команды setcookie , доступны в массиве $_COOKIE при загрузке следующей страницы, о которой вы должны знать.

Чтобы удалить cookie , просто используйте команду setcookie и задайте ей прошедшее время, в качестве даты окончания срока действия.

Чтобы использовать cookie с помощью jQuery, вам понадобится специальный Cookie plugin .

Установка cookie при помощи плагина Cookie вполне понятна:

Процесс чтения cookie тут еще проще. Необходимо лишь вызвать функцию $.cookie() с одним параметром имени cookie и значение cookie будет возвращено:


Чтобы удалить cookie , снова воспользуйтесь функцией $.cookie() , но в качестве второго параметра используйте null :

И в завершение

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

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

Данная публикация представляет собой перевод статьи « MicroTut: Getting And Setting Cookies With jQuery & PHP » , подготовленной дружной командой проекта Интернет-технологии.ру

В этой рубрике Вы найдете уроки, которые относятся к теме создания сайта, но не попали ни в один раздел.

Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг — это будущее Ваших сайтов

Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

Разработка веб-сайтов с помощью онлайн платформы Wrike

Создание вебсайта — процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.

20 ресурсов для прототипирования

Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.

Топ 10 бесплатных хостингов

Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.

Быстрая заметка: массовый UPDATE в MySQL

Ни для кого не секрет как в MySQL реализовать массовый INSERT, а вот с UPDATE-ом могут возникнуть сложности. Чтобы не прибегать к манипуляциям события ON_DUPLICATE можно воспользоваться специальной конструкцией CASE … WHEN … THEN.

Распознавание текста из изображений через командную строку

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

HTTPie — удобный инструмент похожий на cURL

cURL — это самый известный инструмент для отправки HTTP запросов из командной строки. В этом уроке мы познакомим вас с более удобным аналогом, который называется HTTPie.

Подробная инструкция по работе с куки (Cookie) на jQuery/PHP

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

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

Cookie существуют как в PHP, так и в jQuery. Поэтому рассмотрим каждый случай более подробно.

Первым делом скачайте архив в конце статьи. Разархивируйте, файл «jquery.cookie.js» загрузите на ваш сайт, после чего подключите его в секции HEAD. О том, какие варианты подключения скриптов существуют, читайте в нашей инструкции.

Теперь мы можем попробовать создать наш первый куки:

«cookie_name» – имя куки;

«cookie_value» – значение куки;

«expires» – количество дней хранения куки (в нашем случае – 3 дня). По истечении этого времени произойдет автоматическое удаление куки;

«path» – доступность куки на сайте (в нашем случае «/» — доступна на всем сайте). По желанию можно задать только определенную страницу или раздел, где будет доступен куки, например, «/audio/rock»;

«domain» – домен, на котором куки действителен. Если у вас есть поддомен, то можете указать его в этом параметре, например, «domain: «subdomain.your_site.ru»», и в таком случае куки будет доступен только на домене «subdomain.your_site.ru»;

«secure» – параметр, указывающий, что куку нужно передавать по защищенному протоколу https.

Здесь не все параметры являются обязательными и для того, чтобы задать куки, вполне хватит этой конструкции:

Получить куки довольно просто, сделать это можно с помощью кода:

Данный код можно присвоить к переменной и использовать в своих нуждах:

Согласитесь, это весьма удобно.

Чтобы удалить значение куки, присвойте ему значение «null»:


На этом, я думаю, знакомство с работой с Cookie на jQuery закончено. Этих знаний вполне хватит для реализации ваших идей.

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

Для того чтобы установить в PHP куки, мы воспользуемся встроенной функцией «setcookie»:

«cookie_name» – имя куки;

«cookie_value» – значение куки;

«time()+3600» – время жизни куки в секундах (в нашем случае – 1 час). Если задать время жизни равное «», то куки удалится сразу, как будет закрыт браузер;

«/» – раздел, в котором доступен куки (в нашем случае – доступен на всем сайте). Если вы хотите ограничить раздел, в котором куки будет доступен, то «/» замените, например, на «/audio/rock»;

«your_site.ru» – домен, на котором куки будет доступен;

«true» – параметр, указывающий что куки доступен только по защищенному протоколу https. В противном случае значение – false;

«false» – параметр, указывающий, что куки доступен скриптовым языкам. В противном случае – true (доступно только по http).

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

Для удобства значение куки можно задать через переменную:

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

Чтобы исключить появление ошибок из-за возможного отсутствия куки, воспользуйтесь проверкой его существования:

Как и в предыдущем примере работы с Cookie на jQuery, куки можно присвоить к переменной:

Удаление куки на PHP выполняется так же просто, как и в jQuery. Все, что вам нужно сделать, это задать пустое значение куки и отрицательное время (время, которое уже прошло):

Время в данном примере равняется часу назад, чего вполне хватит для удаления куки.

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

В данной заметке коротко о том, что такое cookies (куки). Их создание, чтение и удаление.

Навигация по статье:

Cookies — это механизм хранения данных браузером удаленной машины для отслеживания или идентификации возвращающихся посетителей.

PHP предоставляет для установки файла cookie функцию setcookie() . Для этой функции требуется до шести аргументов (параметров), и она должна вызываться до тега html. Для каждого файла cookie эту функцию нужно вызывать отдельно.

Ниже следует список аргументов (параметров) setcookie() и их описание:

name — устанавливает имя файла cookie и хранится в переменной среды с именем HTTP_COOKIE_VARS. Эта переменная используется для доступа к файлам cookie.

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

expiry — определяет время хранения cookie в секундах с 00:00:00 по Гринвичу 1 января 1970 года. По истечении этого времени cookie станет недоступным. Файлы cookie удаляются после закрытия браузера.

path — Указывает каталоги, для которых действителен файл cookie. Одиночный символ прямой косой черты задает, что файл cookie является действительным для всех каталогов.

domain — может использоваться для указания имени домена в очень больших доменах и должно содержать не менее двух периодов. Все файлы cookie действительны только для хоста и домена, для которых они созданы.

Илон Маск рекомендует:  Сдвигаем вниз

security — может быть установлено 1, чтобы указать, что файл cookie должен передаваться только через защищенное соединение HTTPS. В противном случае это значение равно 0, и это означает, что файл cookie может передаваться через обычное соединение HTTP.

Чтение сookie

PHP предоставляет множество способов доступа к файлам cookie. Самый простой из них — использовать переменные $_COOKIE или $HTTP_COOKIE_VARS . Чаще используется именно глобальная переменная $_COOKIE .

Работа с Cookies на PHP

Введение:


Откуда возник термин «cookie» никто достоверно не знает, хотя считается, что во времена зарождения Unix-систем где-то использовалось словосочетание Magic Cookies. Имелись в виду «квитанции» (token, ticket), которыми обменивались программы.

Cookie является решением одной из наследственных проблем HTTP протокола (HyperText Transfer Protocol). Эта проблема заключается в непостоянстве соединения между клиентом и сервером, как при FTP или Telnet сессии, т.е. для каждого документа (или файла) при передаче по HTTP протоколу посылается отдельный запрос. Включение cookie в HTTP протокол дало частичное решение этой проблемы. Иначе говоря, транзакция завершается после того, как браузер сделал запрос, а сервер выдал соответствующий ответ. Сразу после этого сервер «забывает» о пользователе и каждый следующий запрос того же пользователя считает новым пользователем.

Используя cookie, можно эмулировать сессию по HTTP протоколу. Коротко принцип эмуляции сессии таков: на первом запросе выдается соотвествующее значение cookie, а при каждом последующем запросе это значение читается из переменной окружения HTTP_COOKIE и соответствующим образом обрабатывается.

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

Итак,приступим к практике:

Для задания этой функции в языке php есть оператор:
setcookie() . Самое приятное,сто функция setcookie() воспринимает до шести аргументов, в зависимости от того, как вы собираетесь управлять значениями cookie и кто будет считывать ее значения.

Простейший способ установить cookie таков:

Затем, для каждой последующей страницы на Вашем сайте, просматриваемой в течение данной сессии (пока пользователь не покинет сайт) переменная $name будет иметь значение ‘bret’ и его можно легко прочитать средствами PHP. Этот тип cookie известен как cookie-сессия, поскольку значение сохраняется в течение пользовательской сессии.

Если Вы хотите, чтобы значение cookie запоминалось браузером после того, как пользователь закончит сессию, Вы должны передать функции setcookie() третий параметр — дату истечения срока действия cookie. Поскольку PHP сформировался в основном в среде Unix, Вы должны представить время истечения срока действия cookie как число секунд, прошедших с 1 января 1970 г. Если Вы имеете опыт программирования для Unix, это не покажется Вам удивительным. Но, если Вы программировали только в среде Windows или Macintosh, Вы, может быть, удивитесь, что за чокнутый народ эти Unix-оиды.

Но не бойтесь. PHP имеет очень удобную функцию, mktime() . Вы указываете ей в качестве параметров (в указанном порядке) час, минуту, секунду, месяц, день и год, задающие тот момент времени, который Вы хотите представить в воспринимаемом UNIX формате, и mktime() возвращает Вам число секунд, прошедших с 1 января 1970 г. до указанного момента времени. Например, если Вы хотите, чтобы срок действия cookie истек 1 января 2000 г., Вы записываете:

Если Вы хотите изменить значение cookie на новое, Вы можете просто переписать его (ее?) значение. Таким образом, даже если браузер уже посылал значение cookie серверу на одной из предыдущих страниц, вполне возможно сообщить серверу, что в действительности Вас зовут «jeff.»

Обратите внимание на то, что при этом не меняется значение переменной $name . Оно устанавливается при загрузке страницы. Если Вы хотите чтобы значение переменной изменялось синхронно с изменением значения cookie, Вы должны изменить код следующим образом:

Следующие два параметра функции setcookie() позволяют Вам задать путь и имя домена того, кто может прочитать значение Вашего cookie. По умолчанию только страницы, расположенные в том же каталоге или ниже в структуре подкаталогов того сервера, который установил cookie, могут прочитать его (ее??) значение. Это делается из соображений безопасности. Однако, если у Вашего сервера два доменных имени: «www.domain.com» и «other.domain.com», и Ваш экаунт позволяет Вам обслуживать страницы из каталога

/myhome, Вы должны вызывать функцию setcookie() следующим образом:

Последний параметр функции setcookie() , который мы никогда не использовали, требует, чтобы значение cookie передавалось только на те Web-сервера, которые испольуют безопасный протокол соединения, такой как SSL. Если Вам это нужно, то задайте для шестого параметра значение 1.

Удалить cookie тоже очень просто, достаточно передать функции setcookie() имя cookie и PHP сделает все остальное:

В заключение нужно сделать еще одно замечание, касающееся использования cookie. В силу того, как организована обработка cookies в протоколе HTTP, необходимо установить значения всех cookie до вывода какого-либо текста. Если сделать наоборот, PHP выдаст Вам предупреждение и значение cookie не будет послано. Вот так правильно:

Пример. Функция установки значения cookie

Пример. Функция удаления значения cookie
Принцип работы этой функции заключается в том, что cookie устанавливается с заведомо устаревшим параметром expires, в данном случае 1 января 1970 года.

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

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

А теперь о грусном.

Ограничения:

Клиент (браузер) имеет следующие ограничения для cookies:

  • всего может храниться до 300 значений cookies
  • каждый cookie не может превышать 4Кбайт
  • с одного сервера или домена может храниться до 20 значений cookie

    Если ограничение 300 или 20 превышается, то удаляется первая по времени запись. При превышении лимита объема в 4Кбайт корректность значения cookie страдает — отрезается кусок записи (с начала этой записи) равный превышению объема.

    В случае кэширования документов, например, proxy-сервером, поле Set-cookie HTTP заголовка никогда не кэшируется.

    Если proxy-сервер принимает ответ, содержащий поле Set-cookie в заголовке, предполагается, что поле доходит до клиента вне зависимости от кода возврата 304 (Not Modified) или 200 (OK). Соответственно, если клиентский запрос содержит в заголовке Cookie, то он должен дойти до сервера, даже если жестко установлен параметр If-modified-since.

    Хочу поделиться одной особенностью при установке значений COOKIE, которую очень часто забывают веб-разработчики.
    В моей практике исследования веб-приложений на уязвимости, за 2009-2011 года, данная ошибка встретилась в 87% веб-приложений, написанных на PHP.
    Чтобы как-то уменьшить данный показатель, решил написать этот текст.

    Речь пойдет даже не о httpOnly флаге, хотя его использование не менее важно и обязательно к применению.

    Рассмотрим пример кода:

    Данный код, очевидно, устанавливает два значения COOKIE с именами foo и foo1.
    Теперь главный вопрос — для какого домена и с какими флагами?

    Обратимся к первоисточнику — HTTP-ответу веб-сервера:

    Как видно, сервер ничего не говорит ни о домене, ни о флагах.
    Тогда вопрос переходит в другую плоскость — какой домен и флаги выберет браузер для такого заголовка?

    В случае с Chrome (актуальная версия 18.0.1025.168), все будет более чем хорошо и домен будет ровно такой, с которого пришел запрос. В моем примере — foo.bar.com:

    Если бы все было так хорошо, наверное, здесь бы не было текста…

    Проверим Internet Explorer. Так как красивых плагинов для просмотра COOKIE для него я не знаю, проставим куки для домена foo.com и выведем document.cookie с домена bar.foo.com:

    Это очень печально. И забавно с другой стороны.
    При получении в НТТР-ответе сервера
    Set-cookie: foo=bar
    Internet Explorer ставит foo=bar для ВСЕХ поддоменов, то есть *.foo.com в моем примере без всяких флагов, таких как httpOnly.

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

    А как же остальные браузеры?

    Firefox 12.0 httpOnly wildcard
    Safari 5.1.5 httpOnly wildcard
    Opera 11.62 httpOnly wildcard

    Таким образом, используя конструкции

    в случае использования клиентом Internet Explorer (8-9), вы проставляете COOKIE на ВСЕ поддомены от данного.

  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL