Это статья о файлах cookie, сеансах и локальном хранилище, полезная для сообщества разработчиков PHP.

Файлы cookie — это текстовые файлы, хранящиеся на компьютере клиента и предназначенные для отслеживания возвращающихся пользователей. PHP прозрачно поддерживает файлы cookie HTTP.

Идентификация вернувшихся пользователей состоит из трех шагов:

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

Анатомия файла cookie

Файлы cookie устанавливаются в заголовке HTTP (хотя Javascript также может устанавливать файлы cookie непосредственно в браузере).

PHP-скрипт, который устанавливает cookie, может отправлять такие заголовки.

HTTP/1.1 200 OK Дата: пятница,
04 февраля 2000 г., 21:03:38 по Гринвичу
Сервер: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name= хиз; expires=пятница, 04 февраля 2007 г., 22:03:38 по Гринвичу;
path=/; domain=tutorialspoint.com
Соединение: близко
Тип контента: text/html

Настройка набора файлов cookie PHP

PHP предоставляет функцию setcookie() для установки файла cookie. Эта функция требует до шести аргументов и должна вызываться перед тегами. Для каждого файла cookie эту функцию нужно вызывать отдельно.

setcookie(имя, значение, срок действия, путь, домен, безопасность);

Вот подробности аргументов:

  • Имя: задает имя файла cookie и сохраняется в переменной среды с именем HTTP_COOKIE_VARS. Эта переменная используется при доступе к файлам cookie.
  • Значение. Задает значение названной переменной и содержимое, которое вы хотите сохранить.
  • Срок действия: указывает будущее время в секундах с 00:00:00 по Гринвичу 1 января 1970 года. По истечении этого времени файл cookie становится недоступным, если этот параметр не установлен, срок действия файла cookie автоматически истечет, когда браузер закрыт.
  • Путь. Указывает каталоги, для которых действителен файл cookie. Один символ косой черты позволяет куки-файлу быть действительным для всех каталогов.
  • Домен. Его можно использовать для указания доменного имени в очень больших доменах, и оно должно содержать не менее двух точек, чтобы быть действительным. Все файлы cookie действительны только для хоста и домена, которые их создали.
  • Безопасность: можно установить значение 1, чтобы указать, что файл cookie должен отправляться только безопасным способом с использованием HTTPS; в противном случае установите значение 0, что означает, что файл cookie может быть отправлен по обычному протоколу HTTP.

‹?php

setcookie("имя", "Джон Уоткин", time()+3600, "/", ", 0);

setcookie("возраст", "36", time()+3600, "/", "", 0);

?>

‹html›

‹head›‹title›Настройка файлов cookie с помощью PHP‹/title›‹/head›

‹?php echo «Установить файлы cookie»?›

‹/html›

Доступ к файлам cookie с помощью PHP

PHP предоставляет множество способов доступа к файлам cookie. Самый простой способ — использовать переменные $_COOKIE или $HTTP_COOKIE_VARS.

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

‹html›

‹title›Доступ к файлам cookie с помощью PHP‹/title›

‹?php

эхо $_COOKIE["имя"]. «‹бр /›»;

/* эквивалентно */

echo $HTTP_COOKIE_VARS["имя"]. «‹бр /›»;

эхо $_COOKIE[«возраст»] . «‹бр /›»;

/* эквивалентно */

эхо $HTTP_COOKIE_VARS["имя"] . «‹бр /›»;

?>

‹/html›

Вы можете использовать функцию isset(), чтобы проверить, установлен ли файл cookie или нет:

‹html›

‹title›Доступ к файлам cookie с помощью PHP‹/title›

‹?php

если( isset($_COOKIE["имя"]))

эхо «Добро пожаловать». $_COOKIE["имя"] . «‹бр /›»;

еще

echo «Извините… Не распознано». «‹бр /›»;

?>

‹/html›

Удаление файлов cookie с помощью PHP

‹?php

setcookie("имя", ", время()- 60, "/", ", 0);

setcookie("возраст", "", time()- 60, "/", "", 0);

?>

‹html›

‹title›Удаление файлов cookie с помощью PHP‹/title›

‹?php echo «Удаленные файлы cookie»?›

‹/html›

Сеанс cookie

Переменные сеанса хранятся в ассоциативном массиве с именем $_SESSION[]. Доступ к этим переменным можно получить в течение всего сеанса.

Вы работаете с приложением. Вы открываете его, вносите некоторые изменения, а затем закрываете.

Когда сеанс PHP запускается, происходят следующие вещи:

· PHP сначала создает уникальный идентификатор для этого конкретного сеанса, который представляет собой случайную строку из 32 шестнадцатеричных чисел, таких как 3c7foj34c3jj973hjkop2fc937e3443.

· Файл cookie с именем PHPSESSID автоматически отправляется на компьютер пользователя для хранения уникальной строки идентификации сеанса.

· Файл автоматически создается на сервере в указанном временном каталоге и носит имя уникального идентификатора с префиксом sess_, т.е. sess_3c7foj34c3jj973hjkop2fc937e3443.

Использование сеансов файлов cookie

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

Чтобы начать сеанс, вы вызываете session_start()

// запускаем механизмы!
session_start();
// сохраняем данные сеанса
$_SESSION[“username”] = “Prashant”;

session_start() запускает сеанс между пользователем и сервером и позволяет значениям, хранящимся в $_SESSION, быть доступными позже в других скриптах.

Во втором файле вы снова вызываете session_start(), который на этот раз продолжает сеанс, и затем вы можете получить значения из $_SESSION.

// продолжить сеанс
session_start();
// получить данные сеанса
echo «Имя пользователя = ». $_SESSION["имя пользователя"];

Этот пример представляет собой базовую демонстрацию хранения и извлечения данных в сеансе. В первом скрипте значение «Callum» было связано с ключом «username» в массиве $_SESSION. Во втором сценарии информация запрашивалась из массива $_SESSION с помощью ключа. $_SESSION позволяет вам хранить и извлекать информацию по запросам страниц активного сеанса просмотра пользователя.

Завершение сеанса cookie

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

Чтобы удалить одно значение сеанса, вы используете функцию unset():

session_start();
// удаляем значение имени пользователя
unset($_SESSION[“username”]);
Чтобы отменить все значения сеанса, вы можете использовать функцию session_unset():

session_start();
// удаляем все значения сеанса
session_unset();

Оба примера влияют только на данные, хранящиеся в сеансе, а не на сам сеанс. Вы все еще можете хранить другие значения в $_SESSION после их вызова, если хотите. Если вы хотите полностью прекратить использование сеанса, например, если пользователь выходит из системы, вы используете функцию session_destroy().

session_start();
// завершаем сеанс
session_destroy();

Когда вы уверены, что сеанс вам больше не нужен, уничтожьте его с помощью session_destroy(), а не просто сбрасывайте все его значения с помощью session_unset(). Если вы просто сбросите все значения, а сеанс все еще активен, вредоносный код может присвоить этим сеансам вредные значения.

  • localStorage. API localStorage предоставляет интерфейсным веб-разработчикам доступ к простому хранилищу данных типа "ключ-значение", которое можно использовать для сохранения данных на компьютере пользователя. Сохранение данных на стороне клиента может помочь повысить производительность вашего веб-приложения, поскольку это может уменьшить количество запросов к базе данных, необходимых на сервере. Это высвобождает ценные серверные ресурсы и может привести к снижению затрат на инфраструктуру.
  • localStorage и файлы cookie. До появления localStorage разработчикам, которые хотели хранить данные клиентов, требовались файлы cookie браузера. Хотя этот подход действительно работал, у него были некоторые проблемы. Первая проблема заключается в том, что файл cookie может хранить только 4096 байт данных, что не так уж и много. Другая проблема заключается в том, что файлы cookie отправляются на сервер с каждым HTTP-запросом, который делает клиент. Это увеличивает размер запросов, что приводит к увеличению использования пропускной способности и увеличению времени запросов.
  • Проверка поддержки браузера: localStorage — это новая технология; поэтому мы должны протестировать поддержку браузера и рассмотреть возможность отката для браузеров, не поддерживающих API. Тестирование поддержки localStorage — простой процесс. Все, что вам нужно сделать, это создать простую инструкцию if, содержащую в качестве условия интерфейс localStorage. Обратите внимание на строчную букву «l» в localStorage.

Приведенный ниже код JavaScript localStorage показывает, как проверить, поддерживает ли браузер localStorage API.

if (localStorage) {
// LocalStorage поддерживается!
} else {
// Нет поддержки. Используйте запасной вариант, например файлы cookie браузера, или сохраните их на сервере.
}
Если браузер не поддерживает localStorage, вы можете использовать файлы cookie браузера или отправить данные для хранения на сервере.

Теперь, когда вы понимаете, как проверить поддержку localStorage, давайте посмотрим, что предлагает API.

  • Хранение данных в localStorage

Для хранения данных вы используете функцию setItem(). Эта функция принимает два параметра: ключ элемента и значение.

localStorage.setItem («имя», «Прашант Патил»);

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

// Функции
localStorage.setItem('name', 'Prasahnt');
// Объект
localStorage.name = 'Prasahnt';
// Массив
localStorage['имя'] = 'Прасант';

  • Получение данных из локального хранилища

Для получения данных вы можете использовать функцию getItem(). Это принимает единственный параметр, ключ, который вы использовали для хранения данных.

имя переменной = localStorage.getItem («имя»);

  • Удаление данных из локального хранилища

Чтобы удалить элемент из хранилища данных, вы используете функцию removeItem(). Эта функция берет ключ элемента, который вы хотите удалить.

localStorage.removeItem («имя»);

  • Очистка хранилища данных

Если вы хотите удалить все данные в хранилище данных, вы можете использовать функцию clear().

локальное хранилище.очистить();

  • Получение ключей

Интерфейс localStorage также включает функцию key(), которая может получить ключ элемента данных, используя индекс (числовую позицию) элемента в хранилище данных. По общему признанию, вы, вероятно, не будете использовать эту функцию очень часто, но полезно знать, что она существует.

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

for (var i = 0; i ‹ localStorage.length; i++) {
console.log(localStorage.key(i))
};

Обратите внимание на использование localStorage.length в этом примере. Свойство length сообщает вам, сколько элементов находится в хранилище данных.

Люди часто задают такой вопрос: «может ли сессия работать, если куки отключены»? Да, это работает следующим образом. Нижняя часть формы

  • Он перезапишет все ссылки, чтобы передать дополнительный параметр GET, обычно PHPSESSID, но это можно изменить, установив session.name в php.ini.
  • Он добавит скрытый ввод с тем же именем после всех открывающих тегов.