Відкриваємо PHP-сесію

Сьогодні я хочу розповісти, як використовувати сесії PHP в WordPress. У стандартному PHP-додатку сесія починається після виклику функції session_start, запущеної на початку PHP-скрипта. Вам потрібно відкрити файл header.php теми і додати туди наступний код:

….

Але цей метод складно назвати найефективнішим. 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 ґрунтуються на станах. Сесії зберігаються на сервері і обробляються. Маршрутизація кожної сесії до потрібного сервера вимагає більш складної конфігурації, і створює проблеми для користувачів, чиї сесії зберігаються на цьому сервері.

    По можливості, інформацію про сесіях краще зберігати у браузері. Це дозволить заощадити ресурси сервера, а також позбавитися від непотрібного функціоналу.

    Спасибі, що були з нами! Сподіваюся, вам знадобиться ця стаття, і якщо у вас виникли питання, обов’язково задайте їх у коментарях!

    Переклад статті «Using PHP Sessions in WordPress» був підготовлений дружною командою проекту Сайтостроение від А до Я.