Как автоматизировать удаление старых пустых сессий в WordPress

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

Что такое сессии в WordPress и почему их важно очищать

WordPress с версии 4.0 поддерживает собственный механизм сессий, основанный на таблице wp_sessions (если используется объект WP_Session_Tokens и хранилище сессий). Плагины и темы могут создавать дополнительные сессии, например, для хранения данных аутентификации или пользовательских настроек.

С течением времени в базе данных накапливаются устаревшие или пустые сессии, которые не удаляются автоматически. Они могут занимать лишнее пространство и замедлять запросы к базе данных.

Для оптимизации работы сайта необходимо регулярно очищать эти сессии, особенно если на сайте большое количество пользователей или активны плагины с сессионным хранением данных.

Как проверить наличие и состояние сессий в базе данных

Для начала полезно ознакомиться с таблицами, в которых хранятся сессии. В стандартной установке WordPress сессии хранятся в wp_usermeta в виде токенов, а некоторые плагины создают свои собственные таблицы.

Если используется плагин, например, WooCommerce, то сессии пользователей могут храниться в таблице wp_woocommerce_sessions. Для проверки количества записей можно выполнить запрос в phpMyAdmin или через консоль MySQL:

SELECT COUNT(*) FROM wp_woocommerce_sessions;

Если таблица есть и записи накапливаются, значит сессии необходимо очищать.

Пример: проверка пустых сессий WooCommerce

«Пустая» сессия — это запись, где данные отсутствуют или устарели. Например, можно проверить даты последних обновлений и отфильтровать старые:

SELECT session_key, session_value, session_expiry 
FROM wp_woocommerce_sessions 
WHERE session_expiry < UNIX_TIMESTAMP() - 3600 * 24 * 7;

Этот запрос покажет сессии старше 7 дней, которые можно удалить.

Автоматизация удаления сессий с помощью кода

Для автоматического удаления старых сессий можно создать функцию в файле functions.php вашей темы или в отдельном плагине. Рассмотрим пример для WooCommerce.

Функция для удаления старых сессий WooCommerce

function wplock_delete_old_woocommerce_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $expiry_threshold = time() - 3600 * 24 * 7; // 7 дней назад

    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $expiry_threshold
    ));

    if (false === $deleted) {
        error_log('wplock: Ошибка при удалении старых сессий WooCommerce');
    } else {
        error_log("wplock: Удалено $deleted устаревших сессий WooCommerce");
    }
}

Далее нужно запланировать запуск этой функции, например, с помощью WP-Cron:

if ( ! wp_next_scheduled( 'wplock_cleanup_sessions_event' ) ) {
    wp_schedule_event( time(), 'daily', 'wplock_cleanup_sessions_event' );
}
add_action( 'wplock_cleanup_sessions_event', 'wplock_delete_old_woocommerce_sessions' );

Этот код настроит ежедневное выполнение удаления старых сессий.

Удаление старых сессий WordPress для стандартных сессий пользователей

Для стандартных сессий, которые хранятся через WP_Session_Tokens, нет отдельной таблицы, а сессии хранятся в user_meta. Для их очистки можно использовать метод удаления сессий пользователей.

Пример очистки сессий пользователя

function wplock_destroy_user_sessions( $user_id ) {
    if ( class_exists( 'WP_Session_Tokens' ) ) {
        $manager = WP_Session_Tokens::get_instance( $user_id );
        $manager->destroy_all();
    }
}

Чтобы удалить сессии всех пользователей старше определенного времени, потребуется более сложный запрос и циклы. Но чаще всего достаточно удалять сессии при выходе пользователя или использовать плагин для автоматической очистки.

Рекомендации по плагинам для управления сессиями

Если не хочется писать код, можно использовать плагины, которые предоставляют функционал очистки сессий и оптимизации базы данных:

  • Clearfy Pro — содержит инструменты для оптимизации и очистки базы, включая удаление сессий и неиспользуемых данных. Подробнее на официальном сайте.
  • WP-Optimize — плагин для комплексной очистки базы данных, удаления устаревших записей и оптимизации таблиц.
  • Advanced Database Cleaner — специализированный плагин для удаления ревизий, автосохранений, транзиентов и старых сессий.

Как избежать накопления пустых сессий: лучшие практики

Чтобы минимизировать рост количества пустых или устаревших сессий, рекомендуем придерживаться следующих правил:

  • Используйте актуальные версии WordPress и плагинов — многие обновления содержат оптимизации по работе с сессиями.
  • Настраивайте время жизни сессий в плагинах. Например, WooCommerce позволяет настроить время сессии через фильтр woocommerce_session_expiration.
  • Регулярно очищайте базу данных с помощью автоматических задач WP-Cron или соответствующих плагинов.
  • Избегайте избыточного использования плагинов, создающих собственные сессии, если это не критично.

Пример изменения времени жизни сессии WooCommerce

add_filter('woocommerce_session_expiration', 'wplock_custom_woocommerce_session_expiration');
function wplock_custom_woocommerce_session_expiration( $expiration ) {
    // Установим время жизни сессии в 2 дня (в секундах)
    return 3600 * 24 * 2;
}

Это уменьшит время хранения сессий и, соответственно, количество устаревших записей.

Заключение

Автоматизация удаления старых пустых сессий в WordPress — важный шаг для поддержания производительности сайта и оптимизации базы данных. Используя приведённые примеры кода и рекомендации по плагинам, вы сможете настроить регулярную очистку, уменьшить нагрузку на сервер и обеспечить стабильную работу проекта.

Если хотите расширить функционал сайта с удобными инструментами оптимизации, обратите внимание на Clearfy Pro — универсальный плагин от WPShop с широким набором функций для оптимизации и безопасности WordPress.

Как удалить пустующее изображение в WordPress
02.12.2025
Как удалить редиректы в WordPress: практическое руководство с примерами кода
01.03.2026
Как изменить URL страницы авторского архива в WordPress
23.03.2026
Как удалить неиспользуемые изображения в WordPress
21.11.2025
Как удалить пустые категории в WordPress
07.01.2026