Не часто, но с достаточной периодичностью обращаются клиенты и жалуются то, что заходят к ним на сайты клиенты, добавляют в корзину товары и не успевают сделать заказ, а корзина уже очистилась. Или, например, добавили необходимые товары в корзину, затем отвлеклись на какое-то время - вернулись, а корзина очистилась. Или добавляют необходимо в заказ и сразу не оформляют. Спустя несколько дней заходят на сайт, чтобы оформить заказ, а корзину уже пуста. И приходится заново искать необходимые товары, снова набирать корзину, чтобы сделать покупку.
Конечно, не всех, но многих это расстроит, кто-то уйдет покупать в другое место, а кто-то попробует заново оформить заказ. Чтобы не терять таких клиентов меня часто просят сделать так, чтобы корзины даже неавторизованных пользователей не очищались хотя бы 30 дней.
Как сохранять корзины неавторизованных пользователей 1С Битрикс в течение 1 месяца
Чтобы решить такую задачу нужно понять одно - раз пользователь неавторизован, значит информация о его корзине привязывается к гостевой сессии. И значит, чтобы корзина хранилась нужное нам время, необходимо выставить срок жизни сессии на нужный период - в нашем примере это 1 месяц (30 календарных днем). Риски для безопасности сайта пусть каждый оценит для себя сам, я лишь приведу пример как реализовать указанную задачу.
Ниже показываю полностью рабочую реализация на примере BitrixVM 7.x и BitrixVM 9.x/
1. Переключаем Битрикс на хранение сессий в базе данных
Для этого открываем конфигурационный файл /bitrix/settings.php и для ключа "session" выставляем такие настройки (или добавляем указанный участок настроек, если такого ключа в массиве настроек нет):
'session' =>
array (
'value' =>
array (
'mode' => 'default',
'handlers' =>
array (
'general' =>
array (
'_fromSecurity' => true,
'type' => 'database',
),
),
),
'readonly' => true,
),
2. Увеличиваем время жизни сессии в настройках php
Для этого в файле /etc/php.d/bitrixenv.ini выставляем время в секундах для следующих параметров:
session.gc_maxlifetime = 2592000
session.cookie_lifetime = 2592000
60 секунд * 60 минут * 24 часа * 30 дней = 2592000 секунд в 1 календарном месяце. Перезапускаем httpd после внесения изменений.
3. В настройках групп пользователей увеличиваем время жизни сессии
Заходим в настройки группы "Все пользователи (в том числе неавторизованные)" и на вкладке "Безопасность" выставляем время жизни сессии 43200 минут (60 минут * 24 часа * 30 дней). Сохраняем настройки.
После проведенных манипуляций сессии будут храниться в течение 30 дней, а с ними и данные о корзинах неавторизованных пользователей. То есть если положен товар в корзину - то в течение месяца можно прийти и оформить заказ, даже если Вы на неделю выключили пк и не заходили на сайт. Срок жизни сессии можете исправить под себя по указанным выше примерам.
Однако, повторюсь, риски безопасности просчитывайте для себя сами. А так же учтите, что данные настройки при хорошей посещаемости ресурса могут привести к существенному разрастанию таблиц базы данных, таких как b_user_session и b_sale_fuser.
