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 Я получал критическое предупреждение о сессиях в WordPress "Состояние сайта". Применил приведённый выше код, и это решило мою проблему.

Спасибо, Шив, Если использовать ваше решение, сообщение об ошибке исчезает, но я больше не могу использовать $_SESSION в своих PHP-скриптах, они больше не инициализируются :-(

@Loraga
session_start ( array $options = [] ) : bool
Функция session_start() создает сессию или возобновляет текущую на основе идентификатора сессии, переданного через GET или POST запрос, или через cookie.
Также может быть предоставлена опция read_and_close
. Если установлено значение true, это приведет к немедленному закрытию сессии после ее чтения, тем самым избегая ненужной блокировки, если данные сессии не будут изменены.
Подробнее см. ссылку
Думаю, в вашем случае вам нужно начать сессию и снова поместить в нее значения.

В моем случае это было вызвано плагином "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. Как правило, мы не оказываем поддержку сторонним плагинам. Однако, мне кажется, вы могли бы переформулировать свой вопрос, чтобы узнать о программном исправлении ошибки. Тем не менее, что касается багов в самих плагинах, лучше всего будет обратиться туда, где предлагается поддержка для этих плагинов.

У меня была точно такая же проблема. После множества попыток подключить вызов 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,
]);
}
Стоит отметить, что проблема сохранялась даже при отключенных всех плагинах.
