Opencart 3: Очистка старых сессий

В новой версии Opencart 3 нет стандартного механизма очистки от старых сессий, которые хранятся в базе данных. Поэтому, чтобы они не забивали базу и не тормозили систему, нужно их очищать "вручную".
Что для этого нужно:
Шаг 1
Создадим файл clearsession.php в корне сайта с содержимым:
<?php
require_once('config.php');
$linkmysql = mysqli_connect(DB_HOSTNAME,DB_USERNAME, DB_PASSWORD, DB_DATABASE);
mysqli_query($linkmysql,"delete from `".DB_PREFIX."session` where expire < DATE_SUB(NOW(), INTERVAL 7 DAY);") or die(mysqli_error($linkmysql));
?>
Шаг 2
Добавим задачу в крон:
wget -O /dev/null -q -t 1 "http://site.ru/clearsession.php" >/dev/null 2>&1
Где site.ru надо заменить на ваш домен и время выполнения выставить 1 раз в сутки.
Простые 2 шага помогут вам держать в таблице сессий только записи не старше 7 дней.
ОБНОВЛЕНИЕ 22.10.2020
В связи с тем, что проблема проявляется часто, а не все владельцы сайтов могут справиться с планировщиком задач (Cron), было принято решение написать модификатор.
Суть его очень проста: Очистка сессий в БД происходит каждое воскресенье с 3 до 4 часов утра. Любой, кто зашёл в этот промежуток времени на сайт запустит стандартный механизм очистки сессий. Это отличный баланс между нагрузкой на сервер и очисткой мусора.
ОБНОВЛЕНИЕ 05.08.2021
Оказалось, что в Opencart 3 даже в стандартном механизме закрался баг очистки. Модификатор переделан на универсальное решение. Удаление происходит всех сессий старше 7 дней, вне зависимости от настроек сервера. Архив обновлён.
ОБНОВЛЕНИЕ 05.09.2021
Вновь убрали стандартную очистку сессий в Opencart 3.0.3.8 из-за огромной нагрузки на сервера. Увы в версии 3.0.3.7 Opencart/OcStore это всё остались. Поэтому обновил скрипт для отключения стандартного механизма очистки сессий.
Данный модификатор полностью бесплатный и работает на любых версиях OpenCart 2.х-3.x. Установка происходит через админку сайта стандартными методами.
Скачать можно по ссылке: https://getmanyspeed.ru/files/ClearSessionDB.ocmod.zip

Fatal error: Uncaught Error: Call to undefined method Session\DB::read() in /opencart-3.0.3.8/system/library/session.php:72 Stack trace: #0 /opencart-3.0.3.8/system/framework.php(110): Session->start('5f47ab8c8438453...') #1 /opencart-3.0.3.8/system/startup.php(104): require_once('/opencart-3.0.3...') #2 /opencart-3.0.3.8/admin/index.php(19): start('admin') #3 {main} thrown in /opencart-3.0.3.8/system/library/session.php on line 72

В стандартном файле даже 72 строчки нет: https://github.com/opencart/opencart/blob/master/upload/system/library/session/db.php
Поэтому это уже частный случай и надо смотреть, кто лезет в этот файл, и что там делается.

Читайте внимательнее

надо смотреть модифицированный файл в storage, что там вообще происходит.