PHP не сохраняет сессии на Beget/CloudLinux — Warning: SessionHandler::write() | Мастерская — статьи по WordPress и серверам | de-bor.ru

Частный web-мастер Денис Борисов
WordPress-сайтов

PHP не сохраняет сессии на Beget/CloudLinux — Warning: SessionHandler::write()

Nginx и VPS · 2026-07-13 · обновлено 2026-07-30 · 3 мин чтения
На хостинге Beget (CloudLinux + PHP Selector) при смене версии PHP или после перезагрузки сервера может пропасть директория для сессий. PHP перестаёт писать сессии, админка OpenCart/WP не пускает, в логах: Warning: SessionHandler::write(): open(/tmp/php_sess/sites/…/sess_…) failed: No such file or directory. Решение — переопределить путь сессий через PHP-код: ini_set('session.save_path', …).

Почему это происходит

CloudLinux PHP Selector принудительно задаёт путь для хранения PHP-сессий через директиву php_admin_value в конфигурации Apache. Путь выглядит так:

/tmp/php_sess/sites/2753/

где 2753 — внутренний ID аккаунта на сервере.

Проблема в том, что:

  • Директория /tmp/php_sess/sites/2753/ может не существовать — её должен создать CloudLinux при активации PHP Selector, но это не всегда срабатывает
  • /tmp очищается при перезагрузке сервера — после ребута директория пропадает
  • php_admin_value имеет высший приоритет — его нельзя переопределить через .user.ini или .htaccess
Важно: php_admin_value session.save_path в Apache-конфиге имеет приоритет выше, чем .user.ini. Поэтому создать файл .user.ini с session.save_path = … — бесполезно.

Как исправить

Единственный надёжный способ — переопределить путь сессий прямо в коде PHP, до вызова session_start().

Шаг 1: Создать директорию для сессий

В корне проекта создайте папку, куда у PHP будет доступ на запись. Например, в системном storage:

mkdir -p ~/public_html/system/storage/sessions
chmod 733 ~/public_html/system/storage/sessions

Права 733 (drwx-wx-wx) дают PHP-процессу (который выполняется от владельца файла) право создавать и читать файлы сессий.

Шаг 2: Добавить ini_set() в код

Найдите место, где в вашей CMS стартует сессия. Добавьте строку ini_set('session.save_path', …) перед session_start().

Для OpenCart 2.x файл: system/library/session.php, метод __construct():

// Было:
if ($this->adaptor && !session_id()) {
    ini_set('session.use_only_cookies', 'Off');
    ini_set('session.use_cookies', 'On');
    ini_set('session.use_trans_sid', 'Off');
    ini_set('session.cookie_httponly', 'On');
    …
    session_start();
}

// Стало:
if ($this->adaptor && !session_id()) {
    ini_set('session.save_path', DIR_SYSTEM . 'storage/sessions');
    ini_set('session.use_only_cookies', 'Off');
    ini_set('session.use_cookies', 'On');
    ini_set('session.use_trans_sid', 'Off');
    ini_set('session.cookie_httponly', 'On');
    …
    session_start();
}
Для WordPress: добавьте в wp-config.php перед строкой require_once(ABSPATH . 'wp-settings.php');:
ini_set('session.save_path', dirname(ABSPATH) . '/sessions');
Не забудьте создать папку sessions уровнем выше wp-content и дать права 733.

Шаг 3: Запретить доступ к папке сессий из веба

Добавьте .htaccess внутрь папки сессий:

# sessions/.htaccess
Require all denied

Или (для Apache 2.2):

Order Deny,Allow
Deny from all

Проверка результата

Чтобы убедиться, что сессии пишутся в новую директорию:

  1. Зайдите на сайт (фронтенд), чтобы PHP создал сессию.

  2. Проверьте, что в папке появились файлы sess_*:

ls -la ~/public_html/system/storage/sessions/
# Результат:
# -rw-------  1 user user … sess_abc123def456…
  1. Проверьте, что ошибка пропала из логов:

tail -f ~/public_html/system/storage/logs/error.log
# Сессионных варнингов быть не должно
  1. Попробуйте войти в админку — если раньше не пускало (редирект с меняющимся ID сессии), теперь вход должен работать.

Готово. Если сессии пишутся — ошибка исправлена.

Когда способ не сработает

Если после ini_set() ошибка осталась — проверьте:

  • Права на папку: у PHP-процесса должно быть право записи. Права 733 или 777 (временная проверка).
  • PHP-FPM: если сайт работает через PHP-FPM (а не mod_php), убедитесь, что путь существует для пользователя, от которого запущен пул FPM.
  • Пользователь: на Beget сайты обычно работают от владельца аккаунта. Если ls -la показывает другого владельца — исправьте chown.
  • CloudLinux CageFS: может изолировать пути. Если папка сессий внутри public_html — всё в порядке, CageFS не блокирует запись туда.

Частые вопросы

Почему нельзя просто создать /tmp/php_sess/sites/2753/?
На Beget /tmp/php_sess/sites/ принадлежит root — у пользователя нет прав на создание вложенных директорий. Кроме того, /tmp очищается при ребуте.
.user.ini работает на Beget?
Работает, но не для session.save_path. CloudLinux PHP Selector задаёт этот параметр через php_admin_value — высший приоритет.
А если вернуть старую версию PHP — поможет?
Временное решение. CloudLinux может активировать per-account session isolation и для старой версии. Плюс оставаться на старой PHP — небезопасно.
Это только на Beget?
Нет. Любой хостинг на CloudLinux + PHP Selector: Timeweb, SpaceWeb, FastVPS. Фикс через ini_set() универсален.
Не опасно ли хранить сессии в public_html?
Безопасно, если поставить .htaccess с Require all denied внутрь папки сессий. Доступ из веба должен быть закрыт.

Не получается настроить сессии?

Сталкиваюсь с CloudLinux-багами на Beget, Timeweb, SpaceWeb. Знаю все обходы. Напишите — помогу за полчаса.

Написать в Написать в

Переезд сайта

Переезд сайта

Настрою сервер, SSL, бэкапы.

7.200

Подробнее
Техническая оптимизация

Техническая оптимизация

Серверный кэш, PHP-FPM, Nginx.

7.200

Подробнее

Разрабатываю WordPress-сайты

Лендинги, многостраничные сайты, интернет-магазины на WooCommerce — всё на WordPress с удобной панелью управления.

Сайт под ключ: регистрация домена и хостинга, установка WordPress, настройка шаблона и модулей.

Поддерживаю WordPress-сайты

Обновление плагинов и тем, резервное копирование, мониторинг работоспособности — сайт работает без сбоев.

Оперативное исправление ошибок, создание новых разделов, доработка функционала и наполнение контентом.

Продвигаю WordPress-сайты

SEO-оптимизация, настройка Яндекс Метрики и Вебмастера, подключение Google Search Console.

Оптимизация позволяет «поднять» сайт в поисковых выдачах, увеличить целевой трафик и привлечь новых клиентов.

Чистка от вирусов WordPress

Если сайт взломали, появился подозрительный код или спам-рассылка — найду и удалю вредоносный код, закрою уязвимости и настрою защиту от повторного заражения.

После чистки проверю все файлы и плагины, обновлю WordPress до актуальной версии и настрою автоматическое резервное копирование.

Диагностика сайта

Проверю ваш сайт по ключевым параметрам и подготовлю отчёт с рекомендациями:

  • Скорость загрузки и производительность;
  • Безопасность и уязвимости;
  • SEO-состояние и индексация;
  • Мобильная адаптация;
  • Технические ошибки и код.
Заказать диагностику
Михайлова Анастасия

Денис МАСТЕР своего дела. Вёл целый проект, работали с ним на протяжении 4х месяцев. Отзывчивый, понимающий с полуслова специалист. Стоимость услуг радует, а качество работы приводит в восторг.

Денис спасибо Вам от лица нашей строительной компании и от всего нашего персонала.

Михайлова Анастасия

Игорь Караваев

Обратился к Денису для восстановления сайта на WordPress после сбоя. Сделал, как и обещал, за сутки — сайт снова работает без ошибок. Профессионал своего дела, доходчиво объясняет, вежлив и тактичен. Однозначно рекомендую!

Игорь Караваев

Яна Веркулич

Денис, спасибо огромное за работу)) Очень тепло вспоминаю Вас и все что Вы сделали для моей работы и моего сайта.

Денис Профессионал с большой буквы, решает любые вопросы, отличный специалист))

Рекомендую к сотрудничеству, еще раз спасибо)

Яна Веркулич

Бюро Переводов

Денис оперативно и грамотно справляется со всеми поставленными задачами. Внес правки на англоязычную и русскоязычную версии сайта, учел все пожелания. Будем обращаться еще!

Бюро Переводов

Анастасия Виричева

Денис мастер своего дела, рекомендую его как специалиста.
Понимает, что нужно сделать и справляется с поставленной задачей в короткое время.

Делал сайт для салона красоты, просто и функционально.

Анастасия Виричева

Владимир

Очень много времени мучались с сайтом на OpenCart. «Специалисты» не могли нормально разобраться в проблеме, возникавшей при выполнении элементарной задачи.

Денис сделал это в два счета, также расписал подробно, в чем была проблема и как она решена. На 200% доволен. Даже не хочется его рекомендовать, потому что будет постоянно занят))

Владимир

Ксения Петровская

Денис оперативно ответил и помог решить проблему, которую я даже описать нормально не могла)) Мы сами что-то накрутили с корпоративной почтой — письма то уходили, то нет, в общем всё сломали.

Денис всё починил, теперь у нас нормальная почта, домен работает, письма приходят и уходят. Цена как заявлена — оплатили по факту проверки. Спасибо большое!

Ксения Петровская

Александр Кривуля

Заказал у Дениса доработать сайт на WordPress. При этом трудно себе представлял, что сам хочу. Благодаря профессионализму Дениса и его умению всё грамотно и просто объяснять, предлагать разные варианты решений — цель была достигнута.

Умение общаться доходчиво и терпеливо с клиентами — огромный плюс. Я очень доволен. Однозначно рекомендую!

Александр Кривуля

Кондитер мания

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

Кондитер мания

Бесплатная настройка хостинга и домена

Регистрация хостинга на 1 месяц и домена .ru/.рф на 1 год входит в стоимость разработки сайта.

Подробнее