Управление на сесии в OpenCart 3.x.x

Увеличава ли се драстично обема на базата данни на вашият онлайн магазин OpenCart 3? Имате ли проблеми със скоростта на зареждане?

От известно време започнахме да получаваме сигнали от наши клиенти за забавяне в работата на OpenCart. Някой докладваха и за драстично увеличен обем на базата данни. Други за проблеми при поръчки.

След обстойно изследване и анализ от наша страна успяхме да намерим причината за тези проблеми.

С пускането на Opencart 3, Opencart прекрати използването на сесиите по нормалния начин. От Opencart въведоха записите за потребителските сесии да бъде в базата данни на магазина. 

За сравнение при версиите на OpenCart 2 потребителските сесии се записваха във файл на сървъра, където се хоства страницата с нормална PHP сесия ($ _SESSION).

Във OpenCart 3 по подразбиране записите на потребителските сесии стават в отделна таблица oc_session в базата данни на магазина, в което няма нищо лошо.

Оказа се обаче, че въпросната таблица oc_session не се изтрива периодично, както би трябвало да е и всички потребителски сесии се записват и остават завинаги, което прави базата данни на магазина огромна, особено ако имате голям трафик към сайта. При нашите анализи установихме нарастване на базата данни със по 300MB на ден при сайтове с 10-15 хил. потребителски сесии дневно. Някой от изследваните от нас магазини бяха със обем на таблицата oc_session от по 2-5GB.

За съжаление при нас не сработи нито едно от решенията предлагани от създателя на OpenCart Daniel Kerr в GitHub.  Опитвахме с фикс на кода, със синхронизация на часовите зони на сървъра и базата данни, но проблема продължаваше. Разбира се винаги остава възможността периодично ръчно да се изтрива таблицата със потребителските сесии, като се оставят сесиите за последния ден. Бяхме решили да направим CronJob, който да върши тази функция. 

В крайна сметка се спряхме на много по простото и лесно решение. А именно да върнем стария начин на запис на потребителските сесии във файл, както беше при версиите на OpenCart 2

Ако искате да записвате потребителските сесии във файл, а не във базата данни то трябва да влезете във папка system/config/ и да редактирате файла default.php. В него трябва да търсите променливата session_engine и да промените стойността й като в примера по-долу:

// Session
$_['session_engine']       = 'file'; // db or file can be placed