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

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

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

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;
    }
}

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

1990 0

Комментарии

Пока нет ни одного отзыва. Оставьте отзыв первым
Только авторизованные пользователи могут оставлять комментарии Вход

Похожие статьи

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

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