Привет, друзья. Пришло время поговорить о том, что такое PHP cookie, как их установить, удалить, перезаписать и где они используются. Этот урок для начинающих и полных чайников в программировании, поэтому буду показывать на конкретных практических примерах. Итак, что же такое куки в PHP? Это один из способов хранения определенных данных на стороне клиента. Если говорить проще, то куки хранятся в браузере пользователя. Например при авторизации. Когда юзер отправляет данные, они сохраняются на устройстве. Теперь давайте ближе к делу или сразу к видео
Как установить куки в PHP
Все не так сложно, как может показаться. Установка cookie происходит следующим образом:
setcookie('name', 'value'); |
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) |
setcookie('name', 5, time()+60)
Здесь я установил cookie name со значением — 5, которая удалится через 1 минуту.
Как получить, прочитать, проверить cookie в PHP
В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.
Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.
if(isset($_COOKIE['name'])){
echo 'Куки успешно установлены!';
}else{
echo 'Куки НЕ установлены!';
} |
if(isset($_COOKIE['name'])){
echo 'Куки успешно установлены!';
}else{
echo 'Куки НЕ установлены!';
}
Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.
Теперь у нас есть условие и его можно использовать в некоторых случаях.
Авторизация с использованием PHP Cookie
Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие. После того, как данные с формы будут отправлены, эта форма будет скрыта и показана другая, которая просто будет запоминать все данные, введенные пользователем.
Код 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>';
} |
$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> |
<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 = 0;
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'];
$count++;
}
setcookie('count', $count);
Потом просто выводим на странице переменную count. Протестировать и посмотреть пример работы PHP cookie можно на этой странице:
Демо
Время жизни 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); |
setcookie('name', '');
setcookie('name', '$value', time()-86400);
Надеюсь это руководство было максимально понятным и исчерпывающим. Если вам есть что добавить по этой теме или у вас не работают cookie в PHP, то напишите об этом в комментариях, будем разбираться вместе. Так же можете скачать пример из этой статьи и попрактиковаться самостоятельно.
СКАЧАТЬ
каким образом можно например удалить куки при разлогинивании на сайте? Ведь уже были выведены данные, в частности та же форма авторизации и при использовании setCookie() будет ошибка Cannot modify header information — headers already sent by…
Нужны php setcookie для всего сайта