Site Health: Обнаружена активная сессия PHP
Я новичок в разработке WordPress и только что создал свою первую тему.
В моей панели wp-admin, "Site Health" сообщает, что обнаружена PHP сессия (критическая ошибка), вот сообщение:
PHP сессия была создана вызовом функции session_start(). Это мешает работе REST API и loopback запросам. Сессия должна быть закрыта с помощью session_write_close() перед выполнением любых HTTP запросов.
Мне нужен PHP $_SESSION для скрипта темы, и я добавил следующий код в файл functions.php для правильной инициализации сессий:
<?php
if (!session_id()) {
session_start();
}
Если я удаляю эти строки, сообщение исчезает, но мои PHP сессии перестают работать.
Если я оставляю эти строки, всё, кажется, работает правильно, но это сообщение беспокоит...
Есть ли у кого-нибудь идея, как решить эту проблему, сохранив при этом возможность использовать $_SESSION?
Моя версия WP - 5.5.3, а версия PHP - 7.4.8.
Заранее спасибо за помощь!
Это исправит ситуацию, когда два плагина пытаются запустить сессии, но не устранит предупреждение в "Состоянии сайта", потому что WordPress вообще не рекомендует использовать session_start.
Rup
@rup Я получал критическое предупреждение о сессиях в WordPress "Состояние сайта". Применил приведённый выше код, и это решило мою проблему.
Shiv Babbar
Спасибо, Шив, Если использовать ваше решение, сообщение об ошибке исчезает, но я больше не могу использовать $_SESSION в своих PHP-скриптах, они больше не инициализируются :-(
Loraga
@Loraga
session_start ( array $options = [] ) : bool
Функция session_start() создает сессию или возобновляет текущую на основе идентификатора сессии, переданного через GET или POST запрос, или через cookie.
Также может быть предоставлена опция read_and_close. Если установлено значение true, это приведет к немедленному закрытию сессии после ее чтения, тем самым избегая ненужной блокировки, если данные сессии не будут изменены.
Подробнее см. ссылку
Думаю, в вашем случае вам нужно начать сессию и снова поместить в нее значения.
Shiv Babbar
В моем случае это было вызвано плагином "Contact Form by BestWebSoft".
Если вы столкнулись с такой же ситуацией, необходимо отключать плагины по одному и обновлять страницу /wp-admin/site-health.php, чтобы проверить, сохраняется ли ошибка.
Как объясняется здесь https://stackoverflow.com/questions/64377032/getting-an-active-php-session-was-detected-critical-warning-in-wordpress, это происходит из-за плохо разработанного плагина.
Я обнаружил, что WP e-Store вызывает:
- Обнаружена активная PHP-сессия
- В REST API произошла ошибка
WP SpamShield вызывает:
- Обнаружена активная PHP-сессия
Я посмотрю код и попробую найти способ исправить это в этих плагинах. Без e-Store сайт по сути перестанет работать!
Если кто-то уже сталкивался с этими плагинами и нашёл решение, буду рад узнать, что помогло.
jshumphrey@gmail.com
Добро пожаловать на WPSE. Как правило, мы не оказываем поддержку сторонним плагинам. Однако, мне кажется, вы могли бы переформулировать свой вопрос, чтобы узнать о программном исправлении ошибки. Тем не менее, что касается багов в самих плагинах, лучше всего будет обратиться туда, где предлагается поддержка для этих плагинов.
Matthew Brown aka Lord Matt
У меня была точно такая же проблема. После множества попыток подключить вызов session_start() в других местах процесса загрузки WordPress, коллега предложил мне заменить мой код в functions.php на следующий:
if(session_status() == PHP_SESSION_NONE) {
session_start();
}
Это решение устранило обе проблемы: ошибку в WordPress и позволило пользователям на фронтенде входить в созданную мной систему.
Благодаря ответу @Lee и ссылке @shiv на документацию PHP по session_start, я нашел решение, которое помогло решить мои проблемы. Возможно, оно также подойдет и для автора исходного вопроса.
if (session_status() == PHP_SESSION_NONE) {
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
}
Стоит отметить, что проблема сохранялась даже при отключенных всех плагинах.