Используем PHP-сессии в Wordpress
Открываем PHP-сессию
Сегодня я хочу рассказать, как использовать сессии PHP в WordPress. В стандартном PHP-приложении сессия начинается после вызова функции session_start, запущенной в начале PHP-скрипта. Вам нужно открыть файл header.php используемой темы и добавить туда следующий код:
<?php session_start(); ?>
<!DOCTYPE html>
<head> ....
Но этот метод сложно назвать самым эффективным. WordPress предлагает API Actions, к которому можно привязывать собственные функции. В приведенном далее примере используется как раз этот метод. Добавьте следующий код в самое начало файла functions.php.
- Мы воспользуемся событием init, с помощью которого можно запустить PHP-сессию. При первой инициализации WordPress мы добавляем действие, которое вызывает функцию:
add_action('init', 'start_session', 1);
- Далее создаем функцию start_session. Обратите внимание, что функция сначала проверяет, активна ли сессия, и только потом запускает новую сессию при помощи функции session_id:
function start_session() {
if(!session_id()) {
session_start();
}
}
Закрываем PHP-сессию
Функция session_destroy позволяет очистить сессию PHP. Но когда именно вызывать эту функцию? Многое зависит от самого приложения. WordPress также предлагает несколько способов реализовать это при помощи API Actions.
- В WordPress может потребоваться очистить сессию при выходе пользователя из системы, либо при авторизации нового пользователя на сайте. Для вызова функции end_session(), которую мы создадим позже, будут использоваться хуки wp_logout и wp_login:
add_action(‘wp_logout’, ‘end_session’);
add_action(‘wp_login’, ‘end_session’);
- Далее создаем функцию end_session:
function end_session() {
session_destroy ();
}
Принудительное закрытие сессии
Можно использовать собственный хук, чтобы с помощью PHP закрыть сессию в любом фрагменте шаблона. Мы воспользуемся do_action для вызова функции end_session, которую мы создали выше.
- В файл functions.php нужно добавить следующий код:
add_action('end_session_action', 'end_session');
Если вы все сделали правильно, то самый верх вашего файла functions.php будет выглядеть следующим образом:
add_action('init', 'start_session', 1);
function start_session() {
if(!session_id()) {
session_start();
}
add_action(‘wp_logout’, ‘end_session’);
add_action(‘wp_login’, ‘end_session’);
add_action(‘end_session_action’, ‘end_session’);
function end_session() {
session_destroy ();
}
Теперь нужно добавить глобальную переменную $_SESSION, которой можно воспользоваться в любой момент при работе с приложением. Переменная является массивом, и ниже приведен пример добавления данных в массив сессии:
$foo = ‘Foo Data’;
$_SESSION[‘foo’] = $foo;
Что нужно учесть:
Если вы занимаетесь разработкой масштабируемого сайта, то возможно вам и не придется использовать эти сессии. HTTP – это протокол без запоминания состояний, сессии PHP основываются на состояниях. Сессии хранятся на сервере и обрабатываются им же. Маршрутизация каждой сессии до нужного сервера требует более сложной конфигурации, и создает проблемы для пользователей, чьи сессии хранятся на этом сервере.
По возможности, информацию о сессиях лучше хранить в браузере. Это позволит сэкономить ресурсы сервера, а также избавиться от ненужного функционала.
Спасибо, что были с нами! Надеюсь, вам пригодится эта статья, и если у вас возникли вопросы, обязательно задайте их в комментариях!