Очистка сессий [MODX]

Очистка таблица с сессиями в модикс, автоматическое удаление
19 Августа 2024
htaccess

Настройками сессий

Разберемся с настройками сессий

  1. Заходим в админку modx, нажимаем Управление - Отчёты - Информация о системе

  2. Напротив пункта phpinfo(): жмем кнопку Просмотреть

  3. Сверяем следующие пункты:

    • session.gc_probability - должно быть 1

    • session.gc_divisor - стандартное значение 100

  4. Для того чтобы изменить эти значения, в большинстве своём, достаточно, добавить следующие записи в .htaccess

    php_value session.gc_probability 100
    php_value session.gc_divisor 1

    Теперь сессии должны очищаться при каждом 100 обращении к сайту.

Период удаления

Теперь разберемся, а какие вообще сессии должны удаляться.

  1. Смотрим на настройку:

    • session.gc_maxlifetime - стандартное значение 3600

    • session.cookie_lifetime - стандартное значение 3600

  2. Суть простая, если сессия создалась раньше чем текущее время минус значение в настройках, то её нужно удалить.

    php_value session.gc_maxlifetime 3600
    php_value session.cookie_lifetime 3600

    Эта настройка означает, что время хранения куки и сессии равно 1 часу

  3. В modx за настройки времени хранения сессий отвечают следующие ключи:

    • session_cookie_lifetime
    • session_gc_maxlifetime

smartSessions

Если вы используете пакет smartSessions, то у вас могут неверно писаться юзер агент в таблицу modx_smart_sessions, из-за чего не будут удаляться сессии ботов.

Вы можете заметить что не все HTTP_USER_AGENT записываются в таблицу modx_smart_sessions, в столбце user_agent.

Один из экстремальных вариантов:

$user_agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);

Заменить на:

$user_agent = $_SERVER['HTTP_USER_AGENT'];

Обратите внимание что таким образом вы подвергаете свой сайт sql иньекции, так как храните приходящий HTTP_USER_AGENT в чистом виде.