PHP Cookie — практические примеры использования

  Александр Маврин   Один комментарий

PHP Cookie

Привет, друзья. Пришло время поговорить о том, что такое PHP cookie, как их установить, удалить, перезаписать и где они используются. Этот урок для начинающих и полных чайников в программировании, поэтому буду показывать на конкретных практических примерах. Итак, что же такое куки в PHP? Это один из способов хранения определенных данных на стороне клиента. Если говорить проще, то куки хранятся в браузере пользователя. Например при авторизации. Когда юзер отправляет данные, они сохраняются на устройстве. Теперь давайте ближе к делу или сразу к видео

Как установить куки в PHP

Все не так сложно, как может показаться. Установка cookie происходит следующим образом:

setcookie('name', 'value');

Это базовые значения, которые обязательны для заполнения. Но параметров гораздо больше, а именно 7! Семь, Карл! И вот для чего каждый из них нужен.

1 Name Название (имя) cookie
2 Value Значение (как правило переменная)
3 Expires Время жизни куки
4 Path Путь для которого будут сохранены куки
5 Domain Можно указать поддомен (‘.domain.ru’)
6 Secure Использование только на HTTPS (true или false)
7 HttpOnly Использование только на HTTP (true или false)

В подавляющем большинстве случаев используются первые 3 параметра чтобы записать cookie в PHP. То есть имя, значение и время жизни. Этого вполне достаточно для полноценной работы. Давайте к практике.

setcookie('name', 5, time()+60)

Здесь я установил cookie name со значением — 5, которая удалится через 1 минуту.

Как получить, прочитать, проверить cookie в PHP

В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.

echo $_COOKIE['name'];

Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.

if(isset($_COOKIE['name'])){
  echo 'Куки успешно установлены!';
}else{
  echo 'Куки НЕ установлены!';
}

Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.

Теперь у нас есть условие и его можно использовать в некоторых случаях.

Авторизация с использованием PHP Cookie

Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие. После того, как данные с формы будут отправлены, эта форма будет скрыта и показана другая, которая просто будет запоминать все данные, введенные пользователем.

Пример cookie в PHP
Код PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$name = $_POST['name'];
if (isset($_POST['submit'])) {
  setcookie('name, $name');
  header('Location: ' .$_SERVER["HTTP_REFERER"]);
}
$name_c = $_COOKIE['name'];
$val_1 = $_POST['val1'];
$val_2 = $_POST['val2'];
if(isset($_POST['submin_two'])){
  setcookie('val1, $val_1);
  setcookie('$val_2, $val_2);
}
$val1_c = $_COOKIE['val1'];
$val2_c = $_COOKIE['val2'];
if(isset($_COOKIE['name'])){
  $head = '<div class="block-cookie"><b>Привет, '.$name_c. '!</b></div>';
  $form = '
<form action="" method="post">
  <div class="form-group">
    <small>* Заполните поля и нажмите кнопку отправить</small>
    <input type="text" name="val1" class="form-control" placeholder="Имя" value="'. $val1_c.'""/>
  </div>
  <div class="form-group">
    <input type="text" name="val2"  class="form-control"placeholder="Сообщение" value="'.$val2_c.'" />
  </div>
  <div class="form-group">
    <input type="submit" name="submit" value="Отправить" class="btn btn-primary"/>
    <small>* Потом пробуйте обновить страницу</small>
  </div>
</form>';
}else{
  $head_two = '
<div class="block-cookie2">Введите свое имя, чтобы продолжить.</div>
<p>Этот абзац пропадет после того, как вы введете имя и отправите данные, нажав на кнопку.</p>';
$form2 = '
<form action="" method="post">
  <div class="form-group">
    <input type="text" name="name" class="form-control" placeholder="Введите имя"/>
  </div>
  <input type="submit" name="submit_two" class="btn btn-success"/>
</form>';
}

Теперь осталось в HTML вставить нужные переменные.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div class="container">
  <div class="row">
    <div class="col-md-12">
      < ?=$head ?>
      < ?=$head_two ?>
    </div>
  </div>	
  <div class="row">
    <div class="col-md-12">
      <div class="col"> < ?=$val1_c ?></div>
      <div class="col">< ?=$val1_c ?></div>
    </div>
  </div>
  <div class="row">
    <div class="col-md-4 col-sm-12">
      < ?=$form?>
      < ?=$form2?>
    </div>
  </div>
</div>

Счетчик просмотров страницы на PHP + cookie

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

1
2
3
4
5
6
$count = 0;
if (isset($_COOKIE['count'])) {
  $count = $_COOKIE['count'];
  $count++;
}
setcookie('count', $count);

Потом просто выводим на странице переменную count. Протестировать и посмотреть пример работы PHP cookie можно на этой странице:

Демо
Работа с куки в PHP

Время жизни cookie в PHP

Если не указан третий параметр (Expires), то куки будут храниться до окончания сессии, то есть пока вы не закроете браузер. Но можно выставить и другие временные рамки, к примеру на 1 час или на 1 день и т. д. Вот некоторые примеры:

  • time()+3600 — один час
  • time()+86400 — один день
  • time()+86400 * 30 — 30 дней
  • time()+86400 * 30 * 12 — 1 год

Этого вполне достаточно, но многие интересуются, как сделать так, чтобы куки жили вечно или сделать время жизни бесконечным. Не очень понимаю в каких случаях это может понадобиться, однако ответ на этот вопрос будет — НЕТ, нельзя. Но можно поставить максимальное время. Пишется так: 0x7FFFFFFF — дата 19.01.2038 года.

Как удалить или очистить (unset) куки в PHP

Удаление куки в PHP можно сделать двумя способами. Оставить значение пустым или установить прошедшую дату, со знаком минус:

1
2
setcookie('name', '');
setcookie('name', '$value', time()-86400);

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

СКАЧАТЬ

Добавить страницу в закладки

1 комментарий
  1. Евгений:

    каким образом можно например удалить куки при разлогинивании на сайте? Ведь уже были выведены данные, в частности та же форма авторизации и при использовании setCookie() будет ошибка Cannot modify header information — headers already sent by…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *