PHP-сессия и файлы cookie PHP с примером
Что такое Куки?
Файл cookie — это небольшой файл с максимальным размером 4 КБ, который веб-сервер хранит на клиентском компьютере.
После установки файла cookie все последующие запросы страниц возвращают имя и значение файла cookie.
Файл cookie можно прочитать только из того домена, из которого он был создан. Например, набор файлов cookie с использованием домена www.guru99.com невозможно прочитать из домена Карьера.guru99.com.
Большинство веб-сайтов в Интернете отображают элементы из других областей, например рекламу. Домены, обслуживающие эти элементы, также могут устанавливать свои собственные файлы cookie. Они известны как сторонние файлы cookie.
Файл cookie, созданный пользователем, может быть виден только ему. Другие пользователи не видят его значения.
В большинстве веб-браузеров предусмотрена возможность отключения файлов cookie, сторонних файлов cookie или того и другого.
В этом случае PHP отвечает, передавая токен cookie в URL-адрес.
На приведенной ниже диаграмме показано, как работают файлы cookie.
Здесь,
1) Пользователь запрашивает страницу, на которой хранятся файлы cookie.
2) Сервер устанавливает файл cookie на компьютер пользователя.
3) Другие запросы страниц от пользователя вернут имя и значение файла cookie.
Зачем и когда использовать файлы cookie?
- Http — протокол без сохранения состояния; файлы cookie позволяют нам отслеживать состояние приложения с помощью небольших файлов, хранящихся на компьютере пользователя. Путь, по которому хранятся файлы cookie, зависит от браузера. Internet Explorer обычно хранит их в папке временных файлов Интернета.
- Персонализация взаимодействия с пользователем – это достигается за счет предоставления пользователям возможности выбирать свои предпочтения. Запрошенная страница персонализируется на основе настроек, установленных в файлах 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 будет доступен во всем домене. Подкаталоги ограничивают доступ к файлам cookie к поддомену.
- «[домен]» не является обязательным, его можно использовать для определения иерархии доступа к файлам cookie, т.е.
www.cookiedomain.com
означает весь домен, аwww.sub.cookiedomain.com
ограничивает доступ к файлам cookiewww.sub.cookiedomain.com
и его поддомены. Обратите внимание, что можно иметь субдомен субдомена, если общая длина символов не превышает 253 символа. - «[secure]» не является обязательным, значение по умолчанию — false. Он используется для определения того, отправляется ли файл cookie через https, если для него установлено значение true, или через http, если для него установлено значение false.
- «[Httponly]» не является обязательным. Если для него установлено значение true, то только языки сценариев на стороне клиента, т.е. JavaСценарий не может получить к ним доступ.
Примечание: функция php set cookie должна выполняться перед открывающим тегом HTML.
Давайте теперь рассмотрим пример, в котором используются файлы cookie.
Мы создадим базовую программу, которая позволит нам хранить имя пользователя в файле cookie, срок действия которого истекает через десять секунд.
Код ниже показывает реализацию приведенного выше примера «cookies.php».
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
Вывод:
the cookie has been set for 60 seconds
Получение значения cookie
Создайте еще один файл с именем «cookies_read.php» со следующим кодом.
<?php print_r($_COOKIE); //output the contents of the cookie array variable ?>
Вывод:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Примечание. $_COOKIE — это встроенная в PHP суперглобальная переменная.
Он содержит имена и значения всех установленных файлов cookie.
Количество значений, которые
Массив $_COOKIE может содержаться в зависимости от размера памяти, установленного в php.ini.
Значение по умолчанию — 1 ГБ.
Тестируем наше приложение.
Предположим, вы сохранили файлы PHP в папке phptus.
- Шаг 1. Откройте веб-браузер и введите URL-адрес. http://localhost/phptuts/cookies_read.php
Примечание. Отображался только пустой массив.
- Шаг 2. Перейдите в браузер по URL-адресу. http://localhost/phptuts/cookies.php
- Шаг 3. Вернитесь на первую вкладку и нажмите кнопку «Обновить».
Подождите минуту, затем снова нажмите кнопку «Обновить». Какие результаты вы получили?
Удалить файлы cookie
- Если вы хотите уничтожить файл cookie до истечения срока его действия, вы устанавливаете время истечения срока действия на время, которое уже прошло.
- Создайте новый файл с именем cookie_destroy.php со следующим кодом.
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Повторите шаги с 1 по 3 из приведенного выше раздела по получению значений файлов cookie.
- Откройте URL http://localhost/phptuts/cookie_destroy.php
- Переключиться на URL-адрес http://localhost/phptuts/cookies_read.php какие результаты он показывает?
Что такое сессия?
- Сессия — это глобальная переменная, хранящаяся на сервере.
- Каждому сеансу присваивается уникальный идентификатор, который используется для извлечения сохраненных значений.
- При каждом создании сеанса файл cookie, содержащий уникальный идентификатор сеанса, сохраняется на компьютере пользователя и возвращается при каждом запросе на сервер. Если браузер клиента не поддерживает файлы cookie, уникальный идентификатор сеанса PHP отображается в URL-адресе.
- Сеансы способны хранить относительно большие данные по сравнению с файлами cookie.
- Значения сеанса автоматически удаляются при закрытии браузера. Если вы хотите хранить значения постоянно, вам следует сохранить их в базе данных.
- Как и переменная массива $_COOKIE, переменные сеанса хранятся в переменной массива $_SESSION. Как и в случае с файлами cookie, сеанс должен быть запущен перед любыми HTML-тегами.
Зачем и когда использовать сеансы?
- Вы хотите более безопасно хранить важную информацию, такую как идентификатор пользователя, на сервере, где злонамеренные пользователи не смогут с ней справиться.
- Вы хотите передать значения с одной страницы на другую.
- Вам нужна альтернатива файлам cookie в браузерах, которые не поддерживают файлы cookie.
- Вы хотите хранить глобальные переменные более эффективным и безопасным способом по сравнению с передачей их в URL-адресе.
- Вы разрабатываете приложение, такое как корзина покупок, которое должно временно хранить информацию объемом более 4 КБ.
Создание сеанса
Чтобы создать сеанс, вы должны сначала вызвать функцию PHP session_start, а затем сохранить значения в переменной массива $_SESSION.
Предположим, мы хотим узнать, сколько раз была загружена страница. Для этого мы можем использовать сеанс.
В приведенном ниже коде показано, как создавать и получать значения из сеансов.
<?php session_start(); //start the PHP_session function if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
Вывод:
You are visitor number 1
Уничтожение переменных сеанса
Функция session_destroy() используется для уничтожения всех переменных сеанса PHP.
Если вы хотите уничтожить только один элемент сеанса, вы используете функцию unset().
Код ниже иллюстрирует, как использовать оба метода.
<?php session_destroy(); //destroy entire session ?>
<?php unset($_SESSION['product']); //destroy product session item ?>
Session_destroy удаляет все данные сеанса, включая файлы cookie, связанные с сеансом.
Unset освобождает только отдельные переменные сеанса.
Остальные данные остаются нетронутыми.
Итого
- Файлы cookie — это небольшие файлы, сохраняемые на компьютере пользователя.
- Файлы cookie могут быть прочитаны только с домена-эмитента.
- Файлы cookie могут иметь срок действия, если он не установлен, срок действия файла cookie истекает при закрытии браузера.
- Сессии подобны глобальным переменным, хранящимся на сервере.
- Каждому сеансу присваивается уникальный идентификационный идентификатор, который используется для отслеживания переменных пользователя.
- И файлы cookie, и сеансы должны быть запущены до отправки каких-либо HTML-тегов в браузер.