Вы находитесь на странице: 1из 3

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 40. РАБОТА С СЕТЬЮ. COOKIES

Основы
Cookie – именованная порция информации, сохраняющаяся в браузере
пользователя. Она имеет свой срок хранения, устанавливаемый при
инициализации. Кроме того, современные браузеры позволяют очищать cookies с
длительным сроком хранения при завершении сеанса до истечения срока.
Самым ярким примером использования cookies является хранение
пользовательского логина и пароля для входа на сайт. При очередном переходе на
страницу, где возможна авторизация, данные из cookies (если они не были очищены
или не истек срок их хранения в браузере) автоматически подставляются в поля
логина и пароля. В некоторых случаях используют автоматическую авторизацию,
если такие cookies имеются в браузере пользователя.
Инициализация и установка cookie производится сервером с разрешения
пользователя и представляет собой заголовок вида:
Set-cookie: data
Для удобства работы с этим типом хранения пользовательских данных в PHP
имеется функция setcookie(), которая является, в некотором роде, модификацией
функции header().

Инициализация и установка cookie


Для операции инициализации и установки в браузере cookie, как было сказано
ранее в этом уроке, можно с помощью функции setcookie(). Ее синтаксис следующий:
int setcookie(string $name [, string $value, int $expire = 0, string $path, string $domain,
bool $secure = false, bool $httponly = false])
Функция принимает следующие параметры:
- $name – имя cookie;
- $value – значение cookie, присваиваемое и сохраняемое на клиентском
компьютере;
- $expires – время истечения срока действия cookie. Обычно задается с
помощью функции time() с прибавлением нужного количества секунд (если задать 0,
срок действия cookie истечет в момент закрытия браузера);
- $path – путь к директории на сервере, из которой будут доступны cookie. По
умолчанию устанавливается директория, из которой cookie устанавливаются;
- $domain – домен или поддомен, которому доступны cookie. Чтобы сделать
cookie доступным для всего домена, включая поддомены, необходимо указать имя
домена, например, example.com;
- $secure – в значении true указывает на то, что значение cookie должно
передаваться от клиента по защищенному соединению https. Передача от сервера
к клиенту также должна производиться по защищенному каналу;
- $httponly – при значении true означает доступность cookie только через http-
протокол, что означает недоступность для скриптовых языков наподобие JavaScript.
Параметр спорный и поддерживается не всеми браузерами.

Получение COOKIES
После создания cookies возникает вопрос – как получить доступ к ним со
стороны сервера и проверить, например, имя пользователя или его возраст,
сохраненные в cookies с соответствующими именами?

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Ответ прост – все созданные для определенного домена cookies помещаются


в глобальную переменную, содержащую в себе ассоциативный массив $_COOKIE,
где ключами элементов выступают имена cookie и доступную при переходе
браузером по адресу такого домена (кроме случаев, когда при создании cookie
были указаны только определенные места доступа к cookie в параметрах $path и
$domain).
Рассмотрим пример создания и получения cookies, а также метод передачи
данных POST в листинге 40.1.
Листинг 40.1. Принцип создания cookies на примере передачи данных о
пользователе методом POST.

Файл Listing_40.1_Form.php
<!--Создадим простую форму отправки данных -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Форма отправки данных. Листинг 40.1</title>
</head>
<body>
<form action="Listing_40.1_set_cookie.php" style="display:flex; flex-
direction:column; width:200px;" method="post">
<label for="login">Имя пользователя</label>
<input type="text" name="login" style="margin:10px 0; border-radius: 5px;
border: 1px solid rgb(30,30,30); height: 20px;">
<label for="age">Возраст пользователя</label>
<input type="text" name="age" style="margin:10px 0; border-radius: 5px;
border: 1px solid rgb(30,30,30); height: 20px;">
<input type="submit" value="Отправить" style="margin:10px 0; border-radius:
5px; border: none; height: 30px;">
</form>
</body>
</html>

Файл Listing_40.1_set_cookie.php
//Сценарий обработки входящей информации методом POST и отправки данных в
cookies

//Принимаем входящие данные


$name = $_POST['login'];
$age = $_POST['age'];

//Далее инициализируем cookies


setcookie('name', $name);
setcookie('age', $age);

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

//Перенаправим страницу с помощью заголовка на страницу "Результат отправки


формы", расположенную в файле Listing_45.1_result.php
header('Location: Listing_45.1_result.php');

Файл Listing_40.1_result.php
<!--Создаем простую страницу ответа пользователю по результатам проверки
данных-->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Результат обработки запроса</title>
</head>
<body>
<?php
//Обработаем cookies со значением возраста пользователя и проверим,
совершеннолетний ли он. Если совершеннолетний, то выведем сообщение приветствия на
сайте, если нет - выдадим сообщение о несоответствии возрастной категории
if($_COOKIE['age'] >= 18) {
echo "<h1>Привет, {$_COOKIE['name']}!</h1>
<p>Рады приветствовать тебя на нашем сайте!!!</p>";
} else {
echo "<h1>Здравствуй, {$_COOKIE['name']}!</h1>
<p>Извини, но правила нашего сайта не позволяют допускать к просмотру
содержимого лиц, не достигших совершеннолетия.</p>
<b>Как подрастешь - возвращайся!</b>";
}
?>
</body>
</html>

В результате запуска данного листинга из файла Listing_40.1_Form.php Вы


увидите форму, содержащую всего два поля и кнопку отправки. Форма немного
скорректирована стилями для удобства восприятия. При заполнении данных и
нажатия кнопки «Отправить» будет произведен переход на страницу
Listing_40.1_set_cookie.php. Скорее всего, Вы не заметите данной процедуры, т.к. код
в файле очень простой. Более того, его можно было еще больше сократить, убрав
промежуточные переменные и присвоив функции setcookie() параметры name,
содержащие элементы глобальной переменной $_POST. Далее, после
инициализации cookies происходит перенаправление на страницу
Listing_40.1_result.php с помощью функции создания заголовка header(). В
дальнейшем после получения браузером новой страницы производится проход по
коду и выполняется скрипт, вложенный внутрь разметки HTML. После проверки
значения, содержащегося в cookie с именем age, происходит вывод результатов на
экран. В зависимости от того, какой возраст указан, выводятся различные варианты
сообщений.