@adam_carraway

Как правильно реализовать корзину пользователя?

Пробую реализовал корзину на сайте. Товары в корзине определяются по ip пользователя, используя $_SERVER['REMOTE_ADDR']. Но проблема в том, что если я захожу на сайт с двух устройств, подключенных к оному wifi, то сайт считает два устройства как одно (получается что товары одного пользователя добавляются другому и наоборот). Как можно это исправить ?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Использовать сессию вместо IP: $_SESSION[] и саму корзину (набранные товары туда) сохранять в LocalStorage через JS на клиенте как список ID-шников.
Чтобы при истечении времени сессии, товары из корзины не пропадали.

Если клиент уже имеет учётку - мы сохраняем корзину в базу данных, чтобы сделать её доступной на любом другом устройстве сразу же после авторизации.

При создании новой сессии мы корзину синхронизируем с сайтом, если корзина аккаунта пуста:
1. Если в LocalStorage не пусто
2. Или удалённая корзина пуста
- используем локальную версию и позже отправляем на сервер.

Если клиент залогинился - проверяем наличие серверной корзины.
При несовпадении локального и удалённого набора товаров, предлагаем выбрать один из двух вариантов: локальную корзину или удалённую корзину аккаунта.

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

Заботьтесь о клиентах, чтобы они заботились о вашей прибыли!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
devspec
@devspec
Помогло? Отметь решением
Ассоциируйте корзину не с IP пользователя, а с session id - тогда на втором устройстве не будет товаров с первого устройства.
Хотя в целом подход неправильный. Посмотрите, как сделано у крупных игроков - озон, ситилинк и пр. У них корзина пишется в базу пользователя и доступна на любом устройстве.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы