Ошибки «Обнаружена активная PHP сессия» и «REST API выдал ошибку»
В связи с появлением свободного времени, решил Я проверить техническое состояние своего сайта, произвести обновление различных компонентов (WordPress, PHP, MySQl, Apache и т.д) и проверить работоспособность программного обеспечения. Открыв «Здоровье сайта» если кто не знает это встроенный инструмент для диагностики состояния системы и сервера, я увидел сообщение о двух критических проблемах «Обнаружена активная PHP сессия» и «REST API выдал ошибку». Когда появились эти ошибки было не понятно, но думаю достаточно давно так как данный инструмент последний раз Я открывал наверно еще в прошлом году. Влияние этих ошибок на работоспособность сайта было совсем не значительное, так как сайт работал в штатном режиме. Но раз проблемы есть да и еще критические их хотелось решить. Поискав информацию в интернете, Я понял что в большинстве случаем причины появления этих ошибка практически одинаковые, и решение одно и тоже. Сегодня хочу поделиться своим случаем.
WordPress как убрать критические проблемы
И так вы обнаружили следующие критические проблемы на своем сайте.
Обнаружена активная PHP сессия
Сессия PHP была создана вызовом функции session_start() . Это препятствует работе REST API и петлевых запросов. Сессия должна быть закрыта функцией session_write_close() перед выполнением любых HTTP-запросов.
REST API выдал ошибку
REST API — один из способов коммуникации WordPress и других приложений с сервером. К примеру, экран редактора блоков использует его для отображения и сохранения ваших записей и страниц.
Запрос к REST API неудачен из-за ошибки.
Ошибка: cURL error 28: Operation timed out after 10001 milliseconds with 0 bytes received (http_requ

В 99% случаев эти ошибки связаны с установленными плагинами и темами. Что нужно сделать, для начала произвести обновление, если это не поможет то по очереди отключать плагины и проверять состояние, если и это не поможет то нужно переустановить тему. Если тема доработана и переустановка приведет к потери всех изменений то можно просто поменять на стандартную.

В моем случае причиной появления ошибок «Обнаружена активная PHP сессия» и «REST API выдал ошибку» стал плагин «Капча».

После его отключения все критические проблемы пропали.

Плагины могут быть причиной и других ошибок и даже замедлять работу сайта. В общем если возникают какие либо проблемы с работоспособностью сайта в первую очередь нужно проверить плагины и установленную тему, это касается в первую очередь WordPress.
Обнаружена активная php сессия wordpress как исправить ошибку
Фриланс маркетплейс
Пользователей онлайн: 2108
Последний заказ: 50 сек. назад
Логотип и брендинг
Презентации и инфографика
Арт и иллюстрации
Веб и мобильный дизайн
Маркетплейсы и соцсети
Интерьер и экстерьер
Обработка и редактирование
Полиграфия
Промышленный дизайн
Наружная реклама
Доработка и настройка сайта
Создание сайтов
Десктоп программирование
Скрипты и боты
Мобильные приложения
Сервера и хостинг
Юзабилити, тесты и помощь
Тексты и наполнение сайта
Набор текста
Продающие и бизнес тексты
Резюме и вакансии
Статистика и аналитика
Соцсети и SMM
Контекстная реклама
Базы данных и клиентов
E-mail рассылки
Маркетплейсы и доски объявлений
Реклама и PR
Аудиозапись и озвучка
Музыка и песни
Редактирование аудио
Интро и анимация логотипа
Видеоролики
Персональный помощник
Бухгалтерия и налоги
Обзвоны и продажи
Юридическая помощь
Продажа сайтов
Подбор персонала
Презентация
Обучение и консалтинг
Стройка и ремонт
Логотип и брендинг
Презентации и инфографика
Арт и иллюстрации
Веб и мобильный дизайн
Маркетплейсы и соцсети
Интерьер и экстерьер
Обработка и редактирование
Полиграфия
Промышленный дизайн
Наружная реклама
Доработка и настройка сайта
Создание сайтов
Десктоп программирование
Скрипты и боты
Мобильные приложения
Сервера и хостинг
Юзабилити, тесты и помощь
Тексты и наполнение сайта
Набор текста
Продающие и бизнес тексты
Резюме и вакансии
Статистика и аналитика
Соцсети и SMM
Контекстная реклама
Базы данных и клиентов
E-mail рассылки
Маркетплейсы и доски объявлений
Реклама и PR
Аудиозапись и озвучка
Музыка и песни
Редактирование аудио
Интро и анимация логотипа
Используем PHP-сессии в WordPress
Сегодня я хочу рассказать, как использовать сессии 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()
Принудительное закрытие сессии
Можно использовать собственный хук, чтобы с помощью 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 , которой можно воспользоваться в любой момент при работе с приложением. Переменная является массивом, и ниже приведен пример добавления данных в массив сессии:
$foo = ‘Foo Data’; $_SESSION[‘foo’] = $foo;
Что нужно учесть:
Если вы занимаетесь разработкой масштабируемого сайта, то возможно вам и не придется использовать эти сессии. HTTP – это протокол без запоминания состояний, сессии PHP основываются на состояниях. Сессии хранятся на сервере и обрабатываются им же. Маршрутизация каждой сессии до нужного сервера требует более сложной конфигурации, и создает проблемы для пользователей, чьи сессии хранятся на этом сервере.
По возможности, информацию о сессиях лучше хранить в браузере. Это позволит сэкономить ресурсы сервера, а также избавиться от ненужного функционала.
Спасибо, что были с нами! Надеюсь, вам пригодится эта статья, и если у вас возникли вопросы, обязательно задайте их в комментариях!
Валентин Сейидов автор-переводчик статьи « Using PHP Sessions in WordPress »
Проблема с сессией в PHP
Ситуация такая: был написан сайт и залит на хост, проблем с подключением к базе данных, сессией не было вообще. Стало необходимо перенести этот же сайт на другой домен. Я использовал рег.ру. Я создал копию всех файлов, отвязал домен от хоста, потом привязал нужный, зашёл в панель управления и залил свои файлы обратно(я ничего не менял в коде). Захожу на сайт goodzone.site (ни в коем случае не реклама, проект лично для узкого круга лиц) и встречаю проблему, во первых:
Ignoring session_start() because a session is already active.
Погуглил в инете, нашёл решение, в месте ошибки я заменил простое подключение к сессии на подключение с предварительной проверкой:
Тут возникает сам вопрос, почему такого не было раньше, сайт работал целый месяц и подобной ситуации не возникало? Давайте рассмотрим ситуацию дальше, может для опытного программиста появятся зацепки: У меня на сайте в начале каждого файла запускается сессия. По ходу пользования туда записываются ошибки по типу «неправильный логин или пароль», потом эти данные вытаскиваются; если пользователь регистрируется, то в сессию записывается его данные. А проблема вот в чём: некоторые данные должны записываться по ходу пользования, но почему-то на сайте сразу при запуске выдает ошибку, приведу пример:
Undefined array key "id" in . on line 5
Хотя в файле нужный id запишется в сессию только после того, как пройдёт авторизация.
$id = $_SESSION['id'];
Весь код отрабатывал прекрасно на данном хосте до смены домена. Хочется отметить, что в путях проблем нет. Я в бэкэнде пару месяцев, не могу понять, где зайцы прячутся в данной ситуации, тяжело описать суть проблемы чётко и понятно, поэтому использую такую подачу материала.