Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i Долгое хранение корзины в интернет-магазине / ~#root -i
  • RU
  • UA
  • EN
  • Создать интернет-магазин
  • Документация
  • Блог
    • Unix-подобные ОС
    • Php
    • MySQL
    • JavaScript
    • Менеджеры пакетов
    • Docker
    • Seo
  • Вспомогательные сервисы
    • Короткие ссылки
    • Oбмен просмотрами YouTube
  • Вход
  • Регистрация
  • Главная
  • Php
  • Долгое хранение корзины в интернет-магазине

Долгое хранение корзины в интернет-магазине

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

Рассмотрим каждый из вариантов:

1. В базе. Хранение данных о корзине в базе допускается при наличии уникального идентификатора клиента. Зачастую такой способ используется для авторизированных пользователей вошедших в свой аккаунт.

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

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

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

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

Можно как-то строить "велосипед" по разделению кук. К примеру одна кука - одна позиция товара, а потом как-то их отлавливать и формировать целую корзину, но это того не стоит.

3. В сессии. По моему мнение, данный способ самый не практичный. По умолчанию сервер держит сессию клиента 1440 секунд, если за это время клиент закрыл браузер и не успел оформить заказ, то вся набранная корзина будет потеряна.

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

Оптимальное долгосрочное хранение корзины:

По моему опыту, самым оптимальным способом хранения корзины станет использование комбинации "база+cookie". Такая связка будет работать со всеми плюсами кук и базы.

1. В куках мы создаем уникальный идентификатор с нужным временем хранения, например месяц.

2. В базе создаем таблицу с полями: идентификатора (описан выше), id юзера (если был авторизирован), времени последнего обновления и самих данных о корзине.

3. Пишем минимальный контроллер работающий с этим все.

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

Допустим такая структура таблицы:

CREATE TABLE `cart_table` (
  `cart_key` varchar(50) CHARACTER SET utf8 NOT NULL,
  `user_id` int(11) NOT NULL,
  `last_update` int(11) NOT NULL,
  `cart_data` text CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Схематический код работы:

<?php
/**
* Функция вытягивает из таблицы корзины данные
*/
function getCartData () {
    /*Запускаем initCartCookie()*/
    $key = initCartCookie();

    /*По ключу ищем запись cart_key*/
    /*Далее нужная инфа по обработке*/
}

/**
* Функция записывает данные в корзину
*/
function setCartData () {
    /*Запускаем initCartCookie()*/
    $key = initCartCookie();
    
    /*По ключу ищем запись cart_key, если нет то создаем*/
    /*Далее нужная инфа по обработке*/
}

/**
* Если идентификатор уже есть, возвращаем его, если нет, создаем и возвращаем
*/
function initCartCookie() {
    if (isset($_COOKIE['cart_key']) && trim($_COOKIE['cart_key'])) {
        return strip_tags(trim($_COOKIE['cart_key']));
    } else {
        $key = base64_encode(time() . '-' . rand(10,99). '-' . rand(10,99));
        setcookie("cart_key", $key, (time()+(86400 * 30)));
        return $key;
    }
}

В итоге придется придумать логику работы корзины при авторизации пользователя, мы имеем большое хранение данных в базе по ключу куки (уникальный ключ), мы имеем большой срок хранения корзины. Я считаю, что комбинация "база+куки" верный вариант хранения корзины, но все зависит, конечно же, от логики каждого сайта.

root-i
26 Января 19
1673
0
Теги
Php 5.6 MySQL Php 7 MySQL 5.7
Поделиться

Комментарии

Имя
Электронная почта
Рейтинг
Отзыв

Другие статьи из категории

25 Апреля 2022

Создать и скачать CSV на PHP

Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.

19 Июня 2019

Шаблоны ImageCMS 4.10-4.12.1

Последние шаблоны от ImageCMS 4.12, для скачивания нужна авторизация.

17 Января 2019

Ключ-лицензия для ImageCMS 4.9-4.12.1 Pro и Pre

Создание ключа для imageCMS 4.9-4.12.1 Pro и Pre. Для получения следует авторизироваться.

07 Декабря 2018

$_SERVER['DOCUMENT_ROOT'] в CLI или Cron

При запуске скрипта с консоли отсутствует DOCUMENT_ROOT в $_SERVER. Попытаемся обойти это своими путями, отловить директорию файла.

31 Октября 2018

Анализ нагруженных частей Php кода с помощью xhprof

После разработки какого-либо инструмента на PHP, становится вопрос, насколько созданный код ресурсный и какие элементы он затрагивает еще. Рассмотрим установку xhprof, настройку и рассмотрим способы работы с xhprof.

18 Июля 2018

Группировка условий в запросе ORM Propel (condition, combine)

Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().

14 Июня 2018

Авторизация 1С на сайте PHP_AUTH_USER на CentOS apache

Столкнулся с проблемой авторизации 1с на сайте. Сервер почему то не принимал от нее параметр PHP_AUTH_USER и PHP_AUTH_PW. Рассмотрим подробнее решение и обход данных параметров в $_SERVER .

21 Мая 2018

Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel

Целью статьи стало присоединение (join) не объявленной в схеме (schema.xml) таблице в propel2. Видимо редкий случай или просто недостаточно документации по данной Propel ORM.

Категории

  • Unix-подобные ОС
  • Php
  • MySQL
  • JavaScript
  • Менеджеры пакетов
  • Docker
  • Seo

Теги

Ubuntu 14.04 (17) Софт (11) Gearman (3) Сервисы (2) Framework (1) MVC (1) Php 5.6 (16) Cli (3) Propel (3) ORM (3) JavaScript (5) Css (1) Composer (4) Docker (3) Seo (4) MySQL (5) docker-compose (2) CentOS (1) 1С (1) Memcache (1) Memcached (1) Php 7 (6) Анализ (2) Ubuntu 18.04 (13) MySQL 5.7 (4) Генерация (2) Bower (1) Npm (1) NodeJs (3) Gulp (1) ImageCMS (2) Базы (1) JQuery (1) Сниппет (1) Apache (1) Cron (1)

Последние комментарии

alex, я вижу 2 причины почему так может быть. Не в...
root-i
04.07.22
Сделал все так как написано в статье, не работает.
alex
04.07.22
Как вариант это может происходить из-за неизвестно...
root-i
21.01.22
Чтобы убрать ошибку Uncaught TypeError: $ is not a...
wlad2.ru
11.01.22

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

Благодарность, на продолжение работы сайта:
Контакты

Telegram Viber Mail

Поиск по сайту

  • Вход
  • Регистрация

Сайт работает на chmod -R