Ви припускаєте, що зберігання сеансів та зберігання бази даних є виключними. Вони ні. Але для початку почнемо з того, що вони є.
Перевага для зберігання сеансу є триразовим:
- Не потрібно явно вставляти дані в базу даних. Ви просто встановите змінну сеансу і все закінчено. Простий і функціонально низький ризик.
- Не потрібно керувати життєвим циклом відвідування користувача та кошиком для покупок, оскільки контейнери / рамки роблять це за вас
- Зазвичай для вас робиться автоматичне очищення старих простоїв.
Недоліки зберігання сеансу:
- Спорідненість до сеансу, якщо не досліджувати реплікацію
- Немає жодної помилки, якщо ви не дослідите реплікацію або ручне збереження стану сеансу на диск, що може ускладнитися.
- Усі сеанси повинні зберігатися в пам'яті. Це посилюється, якщо ви використовуєте реплікацію.
Переваги зберігання баз даних:
- Не потрібно турбуватися про спорідненість сеансу чи реплікацію стану. Ви можете обирати всі запити.
- Менше витрат на пам'ять у застосуванні.
- Якщо замовлення завершено, все одно в базі даних все закінчується, тому це може полегшити процес заповнення, оскільки дані вже є.
Недоліки зберігання бази даних:
- Покинуті візки - якийсь анонімний користувач додав товар у свій кошик для покупок і зник. Ці дані залишаються назавжди, якщо у вас немає певного процесу закінчення терміну дії.
- Потрібно придумати спосіб відстеження користувачів та з'ясувати, чи для даного запиту це є існуючим або новим сеансом перегляду. (так, це, мабуть, просто, якщо ви використовуєте файл cookie, але як ви гарантуєте, що двоє користувачів не мають однакового ідентифікатора?).
- Більше коду
Ви не згадали, яку платформу використовуєте. Я б шукав підходу, який використовує підтримуваний на базі даних сеанс, де дані сеансу існують лише в пам'яті протягом життя циклу запитів / відповідей, завантажуючи їх із бази даних та зберігаючи назад у базі даних. Це мені добре служило в минулому.
Переваги сеансу, заснованого на базі даних:
- Немає потреби в спорідненості з сервером.
- Легко в пам'яті сервера додатків
- Дані про незайняті / покинуті сеанси очищаються для вас.
- Життєвий цикл першого відвідування користувача, повторний візит, закінчення сеансу - все для вас зрозуміло.
- Легко кодувати
Недоліки сеансу, що підтримується базою даних:
- Конфігурація - вам потрібно дослідити контейнер, будь то PHP, Java EE (Tomcat, Jetty, JBoss тощо), node.js + express.js або що не підтримує це і надає правильну конфігурацію.
- Вам може знадобитися завантажити тест, оскільки ви додаєте 2 операції з базою даних за запит.
Є третя можливість, яку хтось торкнувся раніше. Ви можете повністю пропустити використання сеансів і використовувати сховище на стороні клієнта, вклавши все у файл cookie або html-локальну пам’ять.
Плюси та мінуси я залишу для вас як вправу, але дам вам підказку, що для зберігання html5 сумісність браузера може бути ретельною увагою.
Я окреслив факти для вас. Сподіваємось, це допоможе вам прийняти правильне рішення для вашої ситуації.