В этом материале мы рассмотрим такие понятия как сессии (sessions) и куки (cookies) в языке программирования PHP.

Куки

Поговорим о куках, куки, cookie, cookies.

Что такое Куки (cookie)?

Куки (Cookie) — это небольшой файл размером не более 4 КБ, который веб-сервер хранит на компьютере клиента.

После установки cookie все последующие запросы страниц возвращают имя и значение cookie.

Файл cookie может быть прочитан только с того домена, на котором он был создан. Например, файл cookie, установленный в домене www.digapp.ru, не может быть прочитан из домена career.digapp.ru.

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

Примечание. Информация о куки есть в официально документации PHP на этой странице.

Куки, созданные пользователем, могут быть видны только ему. Другие пользователи не могут видеть значения куки.

Большинство веб-браузеров имеют опции для отключения cookies, сторонних cookies или и тех, и других. В этом случае PHP отвечает передачей токена cookie в URL.

Вкратце, давайте посмотрим как работают куки:

  1. Пользователь запрашивает страницу, на которой хранятся файлы cookie
  2. Сервер устанавливает cookie на компьютере пользователя
  3. Другие запросы страницы от пользователя будут возвращать имя и значение cookie.

Зачем и когда использовать куки?

Вариантов использования куки на сайтах множество. Остановимся на основных.

  • Http — это протокол без статических данных или протокол без сохранения состояния; куки позволяют нам отслеживать состояние приложения с помощью небольших файлов, хранящихся на компьютере пользователя. Путь, по которому хранятся файлы cookie, зависит от браузера. Internet Explorer обычно хранит их в папке Temporal Internet Files.
  • Персонализация пользовательского опыта — достигается за счет того, что пользователи могут выбирать свои предпочтения. Запрашиваемые последующие страницы персонализируются на основе установленных предпочтений в файлах cookie.
  • Отслеживание страниц, посещаемых пользователем.

Создание куки (cookie)

Теперь рассмотрим основной синтаксис, используемый для создания cookie.

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

Разберем синтаксис более подробно.

В php setcookie — это функция PHP, используемая для создания cookie.

cookie_name — это имя cookie, которое сервер будет использовать при извлечении его значения из переменной массива $_COOKIE. Оно является обязательным.

cookie_value — это значение cookie и поле является также обязательным.

[expiry_time] является необязательным; его можно использовать для установки времени действия cookie, например, 1 час. Время устанавливается с помощью функций PHP time() плюс-минус число секунд, больше 0, т.е. time() + 3600 для 1 часа.

[cookie_path] является необязательным; его можно использовать для задания пути к cookie на сервере. Прямая косая черта или слеш «/» означает, что куки будет доступна на всем домене. Подкаталоги ограничивают доступ файлов cookie к поддомену.

[domain] является необязательным, он может быть использован для определения иерархии доступа к cookie, например, www.cookiedomain.com означает весь домен, а www.sub.cookiedomain.com ограничивает доступ к cookie доменом www.sub.cookiedomain.com и его поддоменами. Обратите внимание, что можно иметь поддомен поддомена, если общее количество символов не превышает 253.

[secure] является необязательным, по умолчанию false. Он используется для определения того, отправляется ли cookie по протоколу https, если установлено значение true, или http, если установлено значение false.

[Httponly] является необязательным. Если он установлен в true, то только языки сценариев на стороне клиента, т.е. JavaScript, не смогут получить к ним доступ.

Примечание. Функция php setcookie должна выполняться перед открывающим тегом HTML.

Давайте теперь рассмотрим пример, в котором используются файлы cookie.

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

Ниже в коде показана реализация приведенного выше примера. Создадим файл cookies.php на сервере, куда поместим данный код:

<?php

setcookie("user_name", "Digapp", time()+ 60,'/'); // expires after 60 seconds
echo 'the cookie has been set for 60 seconds'; // Куки установлены на 60 секунд

После того как мы откроем файл на сервере программа выведет на экран:

the cookie has been set for 60 seconds

Получение значения Cookie

Создадим еще один файл с именем cookies_read.php в котором разместим следующее:

<?php

print_r($_COOKIE); // вывести содержимое переменной массива cookie 

Обращение к данному файлу выведет на экран:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Digapp )
Примечание. $_COOKIE — это встроенная в PHP суперглобальная переменная.

Эта переменная содержит имена и значения всех установленных куки. Количество значений, которые может содержать массив $_COOKIE зависит от объема памяти, установленного в php.ini. По умолчанию это значение равно 1 ГБ.

Давайте теперь протестируем наше мини-приложение. Предположим, что вы сохранили свои PHP-файлы в папке phptuts на локальном сервере.

Откройте веб-браузер и введите URL-адрес http://localhost/phptuts/cookies_read.php. На данный момент отображается только пустой массив.

Перейдите на URL http://localhost/phptuts/cookies.php.

Теперь мы увидим предупреждение: «the cookie has been set for 60 seconds«.

Переключитесь обратно на первую вкладку (с именем cookies_read.php ), затем нажмите кнопку обновления страницы браузера. Теперь мы видим, что массива не пустой:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Digapp )

Далее ждем более 60 секунд, обновляем страницу и убеждаемся, что массив снова стал пустым.

Удаление куки

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

Создайте новый файл с именем cookie_destroy.php со следующим кодом:

<?php

setcookie("user_name", "Guru99", time() - 360,'/');

Повторите предыдущие шаги с примером об извлечении значений cookie. После чего откройте URL http://localhost/phptuts/cookie_destroy.php. Далее перейдите на URL http://localhost/phptuts/cookies_read.php и проверьте какой результат отображается.

Сессии

Поговорим о сессиях, сеансах или sessions.

Что такое сессия?

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

При создании сессии на компьютере пользователя сохраняется файл cookie, содержащий уникальный идентификатор сессии, который возвращается при каждом запросе к серверу. Если браузер клиента не поддерживает cookies, уникальный идентификатор сессии php отображается в URL.

Примечание. Про сессии подробнее можно почитать в официальной документации на этой странице.

Сессии способны хранить относительно большие данные по сравнению с cookies. Значения сессии автоматически удаляются при закрытии браузера. Если вы хотите хранить значения постоянно, то вам следует хранить их в базе данных.

Как и переменная массива $_COOKIE, переменные сессии хранятся в переменной массива $_SESSION. Как и cookies, сессия должна быть запущена перед любыми HTML-тегами.

Зачем и когда использовать сессии?

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

Вы хотите передавать значения с одной страницы на другую.

Вам нужна альтернатива cookies в браузерах, которые не поддерживают cookies.

Вы хотите хранить глобальные переменные эффективным и более безопасным способом по сравнению с передачей их в URL.

Вы разрабатываете приложение, такое как корзина для покупок, которое должно временно хранить информацию объемом более 4 КБ.

Создание сессии

Чтобы создать сессию, необходимо сначала вызвать функцию PHP session_start, а затем сохранить значения в переменной массива $_SESSION.

Допустим, мы хотим узнать количество загрузок страницы, для этого мы можем использовать сессию.

Приведенный ниже код показывает, как создавать и извлекать значения из сессий:

<?php

session_start(); // старт PHP сессии 

if(isset($_SESSION['page_count']))
{
     $_SESSION['page_count'] += 1;
}
else
{
     $_SESSION['page_count'] = 1;
}
echo 'Вы посетитель под номером ' . $_SESSION['page_count'];

Код выведет:

Вы посетитель под номером 1

Уничтожение переменных сессии

Функция session_destroy() используется для уничтожения всех переменных сессии php.

Если вы хотите уничтожить только отдельный элемент сессии, вы используете функцию unset().

В приведенном ниже коде показано, как использовать оба метода.

<?php

session_destroy(); // уничтожить всю сессию

unset($_SESSION['product']); // уничтожить элемент сессии "product" 

session_destroy удаляет все данные сессии, включая куки, связанные с сессией.

unset удаляет только отдельные переменные сессии. Остальные данные остаются нетронутыми.

Заключение

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

Сессии — это как глобальные переменные, хранящиеся на сервере. Каждой сессии присваивается уникальный идентификатор, который используется для отслеживания переменных для пользователя.

И куки и сессии должны быть запущены до того, как в браузер будут отправлены какие-либо HTML-теги.

Статьи #