Как работать с файлами cookie в PHP

Как работать с файлами cookie в PHP

От автора: возможно, вы слышали о файлах cookie, но что это такое и что мы можем с ними сделать? В этом руководстве мы сосредоточимся на основах файлов cookie и узнаем об их функциях в различных веб-приложениях и средах. Мы также узнаем, как работать с файлами cookie в PHP.

Файлы cookie и переменные сеанса

Не уверены, нужны ли вам файлы cookie или переменные сеанса? Переменные сеанса — это способ хранить данные о пользователе в базе данных и извлекать их позже. Файлы cookie — это способ хранения данных о пользователе на его компьютере. Переменные сеанса обычно используются в приложениях, которым необходимо отслеживать активность пользователя. Файлы cookie обычно используются в приложениях, которым необходимо хранить информацию о пользователе для одного сайта.

Вы также можете узнать о переменных сеанса в моем сообщении об PHP.

Что такое cookie?

Начнем с определения: HTTP-файл cookie (также называемый веб-файлом cookie, файлом cookie браузера или просто файлом cookie) — это небольшой фрагмент данных, сохраняемый на компьютере пользователя веб-браузером при просмотре веб-сайта.

Мы можем рассматривать файлы cookie как текстовые файлы, которые сохраняются на вашем компьютере. Когда вы запрашиваете любую веб-страницу, веб-сервер отправляет ответ этой веб-страницы вашему браузеру. Наряду с ответом веб-сервер может также отправлять заголовки Set-Cookie, которые запрашивают у вашего браузера создание файлов cookie на вашем компьютере. После создания файлов cookie для веб-сайта веб-сервер может впоследствии читать контент из этих файлов и записывать его в эти файлы.

У файлов cookie есть дата истечения срока действия. Эта дата устанавливается таким образом, чтобы браузер мог удалять старые файлы cookie, когда они больше не нужны веб-серверу. Если дата истечения срока действия пуста, cookie будет удален при закрытии соединения с сервером. Это происходит, когда пользователь закрывает окно или вкладку сайта или когда пользователь закрывает сам браузер. Эти файлы cookie, иногда называемые сеансовыми файлами cookie, в основном используются для хранения временных настроек.

Давайте рассмотрим, как выглядит заголовок HTTP Set-cookie, на следующем примере:

Set-Cookie: LastVisitedSection=CodeTutsplus; expires=Fri, 31-Mar-2021 23:59:59 GMT; path=/; domain=.tutsplus.com

В приведенном выше примере веб-сервер просит браузер создать файл cookie с названием LastVisitedSection. Браузер будет хранить данные в виде файлов cookie CodeTutsplus. Файл cookie может хранить текстовую строку или число размером до 4 КБ.

Атрибут expires используется для указания даты истечения срока действия. Таким образом, LastVisitedSection cookie будет удален с вашего компьютера после даты 31-Mar-2021 23:59:59 GMT.

Атрибут domain используется для указания домена, в котором cookie будет активен. Если домен будет ads.google.com, cookie будет отправлен только на сервер этого домена, а если домен — .google.com, cookie будет отправлен на любой сервер любого из поддоменов Google, включая его самого (google.com). В нашем примере файл cookie LastVisitedSection будет доступен для tutsplus.comлюбого из поддоменов tutsplus.com.

Путь — это путь к домену, на который отправляется файл cookie. Это означает, что если для пути задано значение /images/, а для домена задано значение ads.google.com, cookie будет отправляться на сервер только в том случае, если браузер запрашивает файл от ads.google.com/images/. Если путь установлен /, cookie будет отправлен на сервер независимо от местоположения запрошенного файла на сервере. В нашем примере cookie LastVisitedSection будет отправлен на все страницы tutsplus.com домена.

Вот так веб-сервер создает файлы cookie на вашем компьютере. В следующем разделе мы обсудим назначение файлов cookie.

Какова цель файлов cookie?

Протокол HTTP — это протокол без сохранения состояния, что означает, что сервер не может запоминать конкретного пользователя между несколькими запросами. Например, когда вы обращаетесь к веб-странице, сервер отвечает только за предоставление содержимого запрошенной страницы. Когда вы получаете доступ к другим страницам того же веб-сайта, веб-сервер интерпретирует каждый запрос отдельно, как если бы они не были связаны друг с другом. Сервер не может узнать, что каждый запрос исходит от одного и того же пользователя.

Теперь, если вы хотите реализовать такие функции, как вход в систему или корзину для покупок, вам необходимо определить, поступили ли два запроса из одного и того же браузера. Это невозможно с протоколом без сохранения состояния. Нам необходимо поддерживать состояние или сеанс между запросами, которые делает браузер для идентификации пользователя. Вот где на помощь приходят куки!

Файлы cookie позволяют обмениваться информацией на разных страницах одного сайта или приложения — таким образом, они помогают поддерживать состояние. Это позволяет серверу знать, что все запросы исходят от одного и того же пользователя, что позволяет сайту отображать пользовательскую информацию и настройки.

На следующей диаграмме показано, как протокол HTTP работает с файлами cookie.

Как работать с файлами cookie в PHP

Как создавать файлы cookie в PHP

В этом разделе мы рассмотрим, как вы можете создавать файлы cookie в PHP. Для создания файлов cookie в PHP вам необходимо использовать функцию setcookie. Давайте рассмотрим основной синтаксис, который используется для создания файла cookie.

setcookie ( string $name , string $value = "" , int $expires = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false );

Список аргументов в функции setcookie должен показаться вам знакомым, поскольку мы уже обсуждали большинство этих параметров ранее в этой статье. Тем не менее, есть еще два аргумента, $secureи и $httponly, которые имеют важное значение для понимания.

Если вы установите для параметра $secure значение TRUE, файл cookie будет создан только при наличии безопасного соединения. Параметр $httponly позволяет сделать только куки HTTP, и, таким образом, он будет доступен только через протокол HTTP. Файлы cookie, настроенные как HTTP, не будут доступны для сценариев, таких как JavaScript.

Итак, это синтаксис — давайте рассмотрим реальный пример.

<?php
setcookie("LastVisitedSection", "CodeTutsplus", time() + 3600, "/", "tutsplus.com", 1);

Он создаст файл cookie LastVisitedSection со значением CodeTutsplus, и срок его действия истечет через час. Для аргумента пути установлено значение /, поэтому он будет отправлен на все страницы домена tutsplus.com. Теперь давайте посмотрим на следующий пример.

<?php
setcookie("favCourse", "PHP", time() + 3600, "/courses/", "code.tutsplus.com", 1);

Поскольку мы установили аргумент пути /courses/, cookie favCourseфайл будет отправлен только в том случае, если браузер запрашивает страницы из https://code.tutsplus.com/courses/.

Таким образом, вы можете создавать файлы cookie в PHP. Самое важное, что нужно помнить при создании файла cookie в PHP, это то, что вы должны установить все файлы cookie, прежде чем отправлять какие-либо данные в браузер. Файлы cookie относятся к заголовку, поэтому вы всегда должны инициализировать новые файлы cookie перед любым выводом. Сюда входят команды echoor, print и теги html и body.

Как читать файлы cookie в PHP

Считывание файлов cookie в PHP несложно. Для чтения доступных файлов cookie необходимо использовать суперглобальную переменную $_COOKIE. Фактически, переменная $_COOKIE представляет собой массив, содержащий все файлы cookie.

Давайте посмотрим на следующий фрагмент.

<?php
if(isset($_COOKIE["LastVisitedSection"])){ echo "Recently visited section: " . $_COOKIE["LastVisitedSection"];
} else{ echo "Welcome guest! We encourage you to explore different sections!";
}

Вы можете использовать функцию print_r или var_dump для проверки всех доступных файлов cookie в целях отладки.

<?php
print_r($_COOKIE);

В PHP так легко читать файлы cookie! В следующем разделе мы увидим, как удалить файлы cookie.

Как удалять файлы cookie в PHP

Вам было бы интересно узнать, что вы также можете использовать функцию setcookie для удаления файлов cookie. Уловка заключается в том, что вам нужно установить дату истечения срока действия в прошлом, и файл cookie будет удален. Давайте посмотрим на это в действии на следующем примере.

<?php
unset($_COOKIE['LastVisitedSection']);
setcookie("LastVisitedSection", "", time() - 3600, "/");

Как видите, мы указали дату истечения срока действия в прошлом, установив для него значение time() — 3600. Важно отметить, что мы также использовали функцию unset для удаления файла cookie LastVisitedSection из $_COOKIE суперглобальной переменной, чтобы убедиться, что cookie LastVisitedSection не будет доступен позже в коде.

Рекомендации по использованию файлов cookie в PHP

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

Никогда не доверяйте данным, поступающим из файлов cookie. Всегда фильтруйте строки и числа! Клиентские компьютеры могут изменять файлы cookie по своему желанию, поэтому злоумышленники могут записать вредоносные данные в файл cookie, чтобы сделать что-то, чего вы не хотите, чтобы выполняла ваша служба.

Постарайтесь оценить, как долго файл cookie должен быть действителен, и соответственно установите дату истечения срока его действия. Вы же не хотите забивать клиентский компьютер старыми файлами cookie, срок действия которых истекает через сто лет.

Всегда устанавливайте флаги secure и httponly, когда это возможно. Если ваше приложение не редактирует файлы cookie с помощью JavaScript, включите httponly. Если у Вы используете HTTPS-соединение, включите secure. Это позволит сохранить целостность и конфиденциальность данных.

Автор: Sajal Soni

Источник: code.tutsplus.com

Редакция: Команда webformyself.