Все не так сложно, как может показаться. Установка cookie происходит следующим образом:
setcookie('name', 'value');
Это базовые значения, которые обязательны для заполнения. Но параметров гораздо больше, а именно 7 и вот для чего каждый из них нужен:
Name
- название (имя) cookieValue
- значение (как правило переменная)Expires
- Время жизни кукиPath
- Путь для которого будут сохранены кукиDomain
- Можно указать поддоменSecure
- Использование только на HTTPS (true или false)HttpOnly
- Использование только на HTTP (true или false)В подавляющем большинстве случаев используются первые 3 параметра чтобы записать cookie в PHP. То есть имя, значение и время жизни. Этого вполне достаточно для полноценной работы. Давайте к практике.
setcookie('name', 5, time()+60)
Здесь мы установим cookie name со значением — 5, которая удалится через 1 минуту.
В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.
echo $_COOKIE['name'];
Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.
if(isset($_COOKIE['name'])){
echo 'Куки успешно установлены!';
} else {
echo 'Куки НЕ установлены!';
}
Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.
Теперь у нас есть условие и его можно использовать в некоторых случаях.
Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие. После того, как данные с формы будут отправлены, эта форма будет скрыта и показана другая, которая просто будет запоминать все данные, введенные пользователем.
$count = 0;
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'];
$count++;
}
setcookie('count', $count);
Теперь осталось в HTML вставить нужные переменные.
<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>
Здесь мы покажем сколько раз каждый их юзеров был на этой странице. Благо делается он очень просто. Вот его код:
setcookie('name', '');
setcookie('name', '$value', time()-86400);
Потом просто выводим на странице переменную count.
Если не указан третий параметр (Expires), то куки будут храниться до окончания сессии, то есть пока вы не закроете браузер. Но можно выставить и другие временные рамки, к примеру на 1 час или на 1 день и т.д. Вот некоторые примеры:
Этого вполне достаточно, но многие интересуются, как сделать так, чтобы куки жили вечно или сделать время жизни бесконечным. Не очень понимаю в каких случаях это может понадобиться, однако ответ на этот вопрос будет — НЕТ, нельзя. Но можно поставить максимальное время. Пишется так: 0x7FFFFFFF
— дата 19.01.2038 года.
Удаление куки в PHP можно сделать двумя способами. Оставить значение пустым или установить прошедшую дату, со знаком минус:
setcookie('name', '');
setcookie('name', '$value', time()-86400);
Полный пример скрипта:
<?php
$name = $_POST['name'];
if (isset($_POST['submit_two'])) {
setcookie('name', $name);
header('Location: ' .$_SERVER["HTTP_REFERER"]);
}
$name_c = $_COOKIE['name'];
$val_1 = $_POST['val1'];
$val_2 = $_POST['val2'];
$range = $_POST['range'];
if(isset($_POST['submit'])){
setcookie('val_1', $val_1);
setcookie('val_2', $val_2);
setcookie('range', $range);
header('Location: ' .$_SERVER["HTTP_REFERER"]);
}
$val1_c = $_COOKIE['val_1'];
$val2_c = $_COOKIE['val_2'];
$range_c = $_COOKIE['range'];
if (!isset($_COOKIE['range'])) {
$range_c = 0;
}
//счетчик
$count = 0;
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'];
$count++;
}
setcookie('count', $count, 0x7FFFFFFF);
if(isset($_COOKIE['name'])){
$head = '<div class="block-cookie"><b>Привет, '.$name_c. '. Это ваше '.$count.'-е посещение страницы!</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 cntr">
<span id="one">'.$range_c.'</span>
<input type="range" name="range" value="'.$range_c.'" min="0" max="500" step="10" oninput="ranger()" id="range">
</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>';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Как установить и удалить куки в PHP</title>
<meta name="description" content="Работа с Cookie в PHP">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<style type="text/css">body {
font-family: sans-serif;
}
.block-cookie {
background: #4caf50;
padding: 5px;
color: #fff;
transition: .5s;
}
.block-cookie2 {
background: #ff5722;
padding: 5px;
color: #fff;
transition: .5s;
}
input[type="range"] {
width: 100%;
-webkit-appearance: none;
background-color: #ff9800;
height: 10px;
outline: 0;
cursor: pointer;
border-radius: 5px;
}
input[type='range']::-webkit-slider-thumb {
width: 25px;
-webkit-appearance: none;
height: 25px;
border-radius: 50%;
cursor: pointer;
background: #4caf50;
}
span #one {
position: relative;
background: #ff5722;
padding: 2px 10px;
color: #fff;
border-radius: 4px;
top: -10px;
display: inline-block;
}
span #one:after {
content: "";
display: block;
border: 10px solid transparent;
border-top: 10px solid #ff5722;
position: absolute;
left: 50%;
transform: translate(-50%, 0);
}
.form-group.cntr {
text-align: center;
}
</style>
</head>
<body>
<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"><?=$val2_c ?></div>
</div>
</div>
<div class="row">
<div class="col-md-4 col-sm-12">
<?=$form ?>
<?=$form2 ?>
</div>
</div>
</div>
<script>
function ranger() {
var rng=document.getElementById('range'); //rng - это Input
var p=document.getElementById('one'); // p - абзац
p.innerHTML=rng.value;
}
</script>
</body>
</html>
// устанавливаем Cookie 'test' со значением 'Hello' на один час
print_r($_COOKIE);
setcookie("test","Hello",time() + 3600);
// при следующем запросе скрипта выводит 'Hello':
echo @$_COOKIE['test'];
setcookie("mm_login", $_SESSION['login'], time() + 3600, "/"); // на час
setcookie("mm_login", $_SESSION['login'], time() - 3600, "/"); // удаление
setcookie("mm_login", $_SESSION['login'], time() + 2592000, "/"); // на месяц
setcookie("zoo_cookie", $row["cookie"], time() + 15000000, "/", ".my-site.by");