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

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

Заказать ускорение сайта у нас!
Оценок: 3 (3.7/5)
Оставить комментарий
               
       
Введите символы или вычислите пример:
captcha
Дмитрий
Дмитрий 30 Октября 2023, 13:26 #
добрый день!
Не совсем понял - качать только модификатор или же еще надо в корень сайта класть ручками clearsession.php и поставить задачу в крон? Запутали немного )
Admin
LEOnidUKG 30 Октября 2023, 15:18 #
День добрый.

Это ИЛИ/ИЛИ.
Вы можете через крон очищать сессии ИЛИ через модификатор
Sergey
Sergey 05 Мая 2022, 20:15 #
Notice: Undefined variable: session_id in /opencart-3.0.3.8/opencart/modification/system/library/session/db.php on line 13
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
Admin
LEOnidUKG 05 Мая 2022, 21:31 #
Вечер добрый.

В стандартном файле даже 72 строчки нет: https://github.com/opencart/opencart/blob/master/upload/system/library/session/db.php
Поэтому это уже частный случай и надо смотреть, кто лезет в этот файл, и что там делается.
Sergey
Sergey 05 Мая 2022, 22:31 #
/opencart-3.0.3.8/system/library/session.php on line 72
Читайте внимательнее
Admin
LEOnidUKG 05 Мая 2022, 22:59 #
От этого суть не меняется, у вас или модифицированный файл или что ещё лезет в файл /system/library/session/db.php
надо смотреть модифицированный файл в storage, что там вообще происходит.
 
Оформление заказа
Не отправляйте пароли от Вашего сайта. Дополнительные данные будут запрошены отдельно по необходимости.
Мы получили Вашу заявку!
Скоро с Вами свяжутся и мы обсудим все детали.


Обязательно проверяйте папку "Спам". Мы постараемся отвечать быстро!