#8 php Куки (cookies): счётчик посещений на setcookie и $_COOKIE - урок для начинающих
Primary tabs
Все наши страницы пока были «без памяти»: сервер обрабатывал каждый запрос так, будто видит посетителя впервые. Но сайты умеют «узнавать» своих — и начинают эту историю куки. Сделаем страницу-счётчик: она покажет, сколько раз вы её открывали.
Немного теории
По протоколу HTTP каждый запрос сам по себе: сервер не помнит, кто уже приходил на сайт, а кто еще нет.
Куки (cookies) — способ дать запросам «память»: сервер в ответе просит браузер запомнить пару «имя=значение» (заголовок Set-Cookie), и браузер прикладывает её ко всем следующим запросам к этому сайту. В PHP установка куки — функция setcookie().
Как это работает
- браузер впервые открывает страницу;
- PHP видит, что куки
visitsещё нет, считает визит первым — и в ответе просит браузер: «запомни visits=1»; - браузер сохраняет куку;
- при следующем запросе браузер сам прикладывает
visits=1— PHP читает её, выводит 2 и просит запомнитьvisits=2— и так по кругу.
Код страницы
<?php
$visits = 0;
if (isset($_COOKIE['visits'])) {
$visits = (int) $_COOKIE['visits'];
}
$visits = $visits + 1;
setcookie('visits', (string) $visits);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Счётчик посещений</title>
</head>
<body>
<h1>Счётчик посещений</h1>
<p>Количество ваших визитов: <?php echo $visits; ?></p>
</body>
</html>
Обратите внимание: PHP-блок стоит до <!DOCTYPE html>. Это не случайно — setcookie() отправляет заголовок ответа, а заголовки, как и header() из урока про редирект, уходят до любого вывода.
Разберём новые моменты:
$_COOKIE— массив пришедших кук, в полном соответствии с$_GETи$_POST;(int)превращает строку из куки в число — про преобразования типов читайте в учебнике: преобразование в строки и из строк;(string)при установке — наоборот, записывает число строкой;- срок жизни куки мы не указали, поэтому она живёт, пока открыт браузер.
Проверяем
Откройте http://localhost:19791/lessons/lesson08-cookie-counter/ и обновите страницу несколько раз — счётчик растёт: 1, 2, 3... А теперь откройте её в режиме инкогнито (или в другом браузере): счётчик начнётся заново — куки у каждого браузера свои.
Можно ли кукам верить
Куки хранятся у посетителя: их видно в браузере, можно удалить, а значение — подменить. Поэтому в куках не хранят секретов и не верят им без проверки — это просто «записка», которую браузер честно возвращает серверу. Как хранить состояние, которому сервер может доверять, — тема следующего урока.
Попробуйте сами
- в DevTools (F12 → Application → Cookies) найдите куку
visitsи сверьте её значение со счётчиком; - удалите куку там же и обновите страницу — счётчик сбросится;
- задайте куке срок жизни: третьим аргументом
setcookie('visits', ..., time() + 3600)— «на час» (документация time()); - посложнее: при первом визите показывайте «Вы здесь впервые!».
Итоги
- HTTP сам по себе не помнит посетителей — куки добавляют запросам «память»;
setcookie()просит браузер запомнить значение,$_COOKIE— прочитывает пришедшее;setcookie(), как иheader(), работает только до любого вывода;- куки — данные на стороне клиента: их видно и можно подделать.
В следующем уроке — сессии: научимся хранить данные о посетителе на самом сервере.
- Log in to post comments
- 12 reads