Отправка кук онлайн урок.


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

Функция setcookie() зависит от одного обязательного аргумента - названия куки. Потому отправить нашу первую куку будет очень просто:

setcookie('my_test');

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

setcookie('my_test', 'This is some value');

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

В данном случае мы не указывали срок годности куки. Это означает, что записанная кука будет удалена при закрытии браузера. Третьим аргументом можно указать конкретное время (в формате Unix timestamp), когда кука будет удалена. Наиболее простой и понятный способ прописать время - это добавить нужное количество секунд к текущей метке времени. Например:

  • time() + 60 * 60 - один час

  • time() + 60 * 60 * 24 - сутки

  • time() + 60 * 60 * 24 * 7 - неделя

и т.д.

Итак, отправим нашу куку со сроком годности в 366 дней (это примерно 1 год):

setcookie('my_test', 'This is some value', time() + 60 * 60 * 24 * 366);

Также, мы можем указать из каких каталогов будет доступна кука. По умолчанию (если не указать) - она доступна в текущем каталоге. Если необходимо, чтобы она была доступна во всех каталогах, необходимо записать четвертый параметр в виде '/'. Если мы, к примеру, подставим в четвертый параметр строку '/news/', то куки будут доступны в этом каталоге и во всех его подкаталогах. Перепишем наш пример:

setcookie('my_test', 'This is some value', time() + 60 * 60 * 24 * 366, '/');

Функция setcookie() также имеет еще два необязательных аргументов - булевский параметр, который отвечает за то, будет ли кука передаваться только через HTTPS протокол, а также булевский параметр, который отвечает за то чтобы, куки были доступны исключительно посредством HTTP протокола (это, к примеру, не дает доступ к кукам через JavaScript).