Как не надо делать корзину интернет-магазина

Я не знаю, как так получилось. Правда. Как в мире программирования может существовать такой феномен? Это сфера, в которой работают умные люди, эти люди обычно стараются продумать все до мелочей, в этом и заключается одна из основных обязанностей программиста.

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

Проблема

Повторюсь, что я не знаю, как такой очевидный фейл может существовать в мире программирования, но в 2016 году 8 февраля все еще существуют магазины, которые хранят корзины пользователей в сессии и их много!

Глупость сего факта столь очевидна, что мне даже как-то неловко продолжать этот пост, но раз уж такая проблема до сих пор существует, то позволю себе побыть Капитаном Очевидностью.

Почему?

Давайте рассмотрим парочку негативных моментов, связанных с хранением корзины в сессии.

Для начала рассмотрим некоторые свойства данных, которые хранятся в сессии:

  1. Они временные
  2. По ним нельзя делать выборки
  3. Они привязаны к одному конкретному браузеру (даже не устройству)

А теперь посмотрим, какие существуют негативные последствия хранения корзины подобным образом.

Выброшенная прибыль

Если пользователь долго и нудно собирал себе корзину, а потом ему пришлось отлучиться на пару часов, вернувшись к компьютеру, он может обнаружить, что кропотливо собираемая им корзина внезапно опустела. Станет ли пользователь собирать ее снова? Я сегодня не стал, поэтому магазин потерял 200 долларов прибыли.

Выброшенная статистика

Магазин теряет возможность анализировать данные. Неужели существует столько магазинов, которые не хотят узнать, чем интересуются их клиенты, как часто люди начинают что-то собирать в корзину, но в итоге не покупают, почему так происходит, какие товары предлагать клиенту, чтобы с большей степенью вероятности заинтересовать его? На все эти вопросы невозможно ответить, если магазин хранит корзину в сессии.

Выброшенная прибыль…

Да, такой заголовок уже был, но что ж поделать, что некоторые магазины совершенно не хотят зарабатывать больше.

Нужно понимать, что некоторые пользователи (включая меня) любят выбирать, поэтому долго и нудно собирают свои корзины. Если покупка дорогая, то она требует особенно тщательного выбора. Если в магазине большой ассортимент, то сбор корзины может происходить несколько дней. Особенно, если у магазина есть минимальная сумма заказа, гарантирующая бесплатную доставку. Особенно, если эта сумма сильно превышает среднюю цену товаров, представленных в магазине (т. е. для ее достижения придется положить в корзину много товаров, а не 2-3).

Это говорит о том, что люди должны иметь возможность собирать корзину на разных устройствах: начать, например, дома на компьютере, продолжить на работе на другом компьютере, потом на планшете, сидя на унитазе, потом на мобильном телефоне по пути домой, потом на макбуке в постели перед сном, а потому уже утром, проснувшись в хорошем настроении, нажать заветную кнопочку “Купить”. И желательно, чтобы корзина не была пустой к этому моменту ;)

Понятное дело, что хранение корзины в сессии не дает людям такого “раздолья”. Мало того, что пользователь не может продолжить собирать корзину с другого компьютера, так он даже не сможет продолжить на том же самом компьютере, но в другом браузере, если с его основным браузером что-то случится.

Примеры?

Я живу в Казахстане, поэтому сначала будут два казахстанских магазина.

Самый ужасный пример – магазины сети “Меломан”:

  1. http://www.meloman.kz/
  2. http://www.komfort.kz/
  3. http://www.marwin.kz/

Почему это самые ужасные примеры?

Потому что это пример магазинов, где есть все факторы, способствующие тому, что пользователь будет собирать корзину долго:

  1. Большой ассортимент
  2. Есть дорогие товары
  3. Минимальная сумма заказа для бесплатной доставки должна составить ~137 долларов по текущему курсу (50000 тенге), что гораздо больше, чем обычно
  4. При этом есть куча мелких товаров, стоимостью менее 1000 тенге

Еще один пример – http://tramontina.kz/

Здесь дела получше, потому что особенно дорогих товаров вроде бы нет (и контент заполнен гораздо аккуратнее, хотя это уже другая тема). Но ассортимент магазина все еще большой, минимальная сумма заказа тоже присутствует, недорогих товаров тоже много, поэтому корзина может собираться достаточно долго.

И последний пример из моего давнего прошлого, когда я еще писал на ферймворке CodeIgniter:

https://ellislab.com/codeigniter/user-guide/libraries/cart.html

Это библиотека фреймворка, которая поддерживает только работу с сессиями. Библиотека фреймворка, Карл! Т. е. все магазины, написанные на CodeIgniter, будут такими же плохими примерами, как те, что я уже перечислил.

А как правильно?

Я себя все еще чувствую Капитаном Очевидностью, но вдруг кто-то прочел и решил, что раз уж не в сессиях, то в cookies. Если ты, мой дорогой читатель, так подумал, то найди себе другую работу, чтобы мир стал чуточку лучше ;)

Единственный правильный способ хранения корзины – база данных. Это решает все вышеописанные проблемы:

  1. Корзина никуда не убежит и не очистится внезапно
  2. Так как данные сохранены, то магазин их может анализировать, делать выводы и предлагать клиентам только то, что их по-настоящему интересует
  3. Корзина привязана теперь не к одному определенному браузеру, а к пользователю системы, который может авторизоваться с любого устройства на этой планете и продолжить собирать корзину

Вывод

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

Во всех остальных случаях, пожалуйста, храните данные в постоянных хранилищах, чтобы в 2016 году в мире стало на одно зло меньше.

← Back