Перейти к содержимому

Обнаружена активная php сессия wordpress как исправить ошибку

  • автор:

Ошибки «Обнаружена активная 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

Обнаружена активная PHP сессия

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

Wordpress Здоровье сайта

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

Wordpress как убрать критические проблемы

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

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 .

  1. Мы воспользуемся событием init , с помощью которого можно запустить PHP-сессию . При первой инициализации WordPress мы добавляем действие, которое вызывает функцию:
add_action('init', 'start_session', 1);
  1. Далее создаем функцию start_session . Обратите внимание, что функция сначала проверяет, активна ли сессия, и только потом запускает новую сессию при помощи функции session_id :
function start_session() < if(!session_id()) < session_start(); >>

Закрываем PHP-сессию

Функция session_destroy позволяет очистить сессию PHP . Но когда именно вызывать эту функцию? Многое зависит от самого приложения. WordPress также предлагает несколько способов реализовать это при помощи API Actions.

  1. В WordPress может потребоваться очистить сессию при выходе пользователя из системы, либо при авторизации нового пользователя на сайте. Для вызова функции end_session() , которую мы создадим позже, будут использоваться хуки wp_logout и wp_login :
add_action(‘wp_logout’, ‘end_session’); add_action(‘wp_login’, ‘end_session’);
  1. Далее создаем функцию end_session :

function end_session()

Принудительное закрытие сессии

Можно использовать собственный хук, чтобы с помощью PHP закрыть сессию в любом фрагменте шаблона. Мы воспользуемся do_action для вызова функции end_session , которую мы создали выше.

  1. В файл 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']; 

Весь код отрабатывал прекрасно на данном хосте до смены домена. Хочется отметить, что в путях проблем нет. Я в бэкэнде пару месяцев, не могу понять, где зайцы прячутся в данной ситуации, тяжело описать суть проблемы чётко и понятно, поэтому использую такую подачу материала.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *