Cookie имеют свою спецификацию. Они не описаны в протоколе HTTP. Там описаны только заголовки, в которых посылаются cookie.
История cookie начинается с существования компании Netscape Communications (NC), которая выпускала браузер Netscape Navigator. Тогда возникла проблема: протокол HTTP имеет недостаток, он – протокол без состояния. Когда данные приходят на сервер, сервер о нас ничего не помнит. Сервер получил что-то — ответил. Потом мы посылаем новый запрос, а мы для него новый человек. Он про нас забыл, как только ответил.
Поэтому возникла необходимость сохранять промежуточные данные (типа имени пользователя). И компания NC пишет первую спецификацию cookie. В первой спецификации было наложено ограничение на размер cookie в 4kb; с одного домена принималось ограниченное количество cookie.
См. картинку выше. Мы говорим серверу, чтобы сервер сказал браузеру, чтобы тот поставил пользователю Васе cookie. Cookie — это строка вида ‘имя=значение’. Хранят cookie все браузеры по-разному. В следующий раз, когда пользователь зайдет на сайт, проверяется наличие cookie в браузере, если есть — посылается заголовком на сервер.
Для работы с cookie в PHP написана функция setcookie.
setcookie (name [, value [,expire [, path [, domain[, secure]]]]])
Параметры по порядку:
- Имя куки. Только латинские буквы, цифры, символ подчеркивания и дефис. Все другие символы будут преобразованы в символ подчеркивания.
- Значение параметра.
- Дата истечения срока годности.
- Путь, который определяет, в какой части домена может использоваться данный файл cookie.
- Домен, который получит cookie.
- Указание, что данные cookie должны передаваться только через безопасное соединение HTTPS.
Cookie бывают временные (сессионные) и постоянные. Сессия — это то время, пока открыт браузер пользователя. Как правило, такие cookie браузеры никуда не сохраняют, а хранят в памяти; браузер закрывается — cookie удаляются. Постоянные сookie — для них указывается параметр ‘expire’ — срок годности. Не рекомендуется передавать пароль в cookie. Пример создания cookie:
setcookie ("TestCookie", // имя cookie $value, // значение cookie time()+3600, // время жизни в секундах "/docs/", // где использовать cookie ".site.com", // на каком домене применить cookie 1); // использовать HTTPS
Cookie посылаются в заголовках при общении клиент-сервер. Cookie должны идти перед выводом контента. В коде во вне php-кода выводом считается все, что угодно, даже пустая строка. Поэтому cookie должны быть в начале кода.