Незавершенные покупки. Автоочистка

Приветствую всех.

Возник вопрос: каким образом можно настроить автоматическое удаление старых незавершённых заказов из раздела Незавершенные покупки?
По идее, они должны быть привязаны к сроку жизни сессии, но сами никуда не исчезают - надо удалять руками.

У нас без всяких дополнительных настроек удаляются все незавершенные заказы сроком больше 1 календарного месяца. Остаются только незавершенные заказы от зарегистрированных пользователей.

Месяц это много. У меня БД больше гигабайта вырастет за месяц.

Тут не все так просто, все сроки хранения прописаны в ядре.

То, что в админке в разделе “Незавершенные покупки” – это информационные данные для администратора; если их удалить, то у покупателя не очистится корзина/закладки. Записи старше 30 дней очищаются автоматически.

Есть отдельное хранение сессий с товарами в корзине/закладках для покупателей. Сессии для гостей хранятся 14 дней, после чего у покупателя очищается корзина/закладки. Для зарегистрированных и авторизованных хранение корзины/закладок – 30 дней (вроде бы).

Очистка происходит, если в заданный период пользователь не заходил на сайт. В ином случае сессия будет обновлена и срок хранения увеличится до изначального значения (так с хранением в redis работало, а с сессиями в бд – не факт).

В теории, можно без правок ядра сделать автоочистку по расписанию через sql scheduler (аналог cron для БД), который будет чистить данные из таблицы старше X-дней.

Но я не знаю, что чистить. Что-то из этого?
cscart_sessions
cscart_user_session_products
cscart_stored_sessions

Есть настройки по времени куков и сессий в config.php, но они не влияют на незавершённые.

cscart_user_session_products
cscart_stored_sessions

Это. Первая – незавершенные покупки в админке. Вторая – хранилище сессий.

cscart_sessions – тут сессии всего 2 часа хранятся и потом переносятся в cscart_stored_sessions на 2 недели.

Пример запросов:

DELETE FROM cscart_user_session_products WHERE timestamp < (UNIX_TIMESTAMP() - 604800)

DELETE FROM cscart_stored_sessions WHERE expiry < (UNIX_TIMESTAMP() - 604800)

604800 – срок в секундах (в данном случае неделя). То есть запросы удалят данные из таблиц старше 7 дней.

Добавляете две задачи на каждый запрос в “События” в phpmyadmin и они будут срабатывать по заданному расписанию.

image

Если раздела “События” нет, то попросите хостера включить sql sheduler.

Конфликтов в работе быть не должно, потому как настройки в ядре делают то же самое – чистят записи в БД старше определенного срока. Но лучше потестите на тестовой копии магазина и с меньшими сроками (1 час), если есть возможность.

4 лайка

Есть возможность запускать только кроном из PHP-файла. Нужна ли задержка между запросами к одной таблице в файле? Удалить, оптимизировать

К сожалению, я слишком слаб в PHP и не смогу подсказать :frowning_face:

у меня cscart_sessions уже 3,8gb. подскажите, можно просто очистить, или корзины клиентов поудаляются?

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

1 лайк