Сохраняемость корзины покупок: $ SESSION или cookie браузера?

на сайте электронной коммерции без имени пользователя / входа для сохранения данных корзины, было бы лучше использовать переменную PHP $_SESSION или файл cookie браузера для сохранения элементов в корзине покупок? Я склоняюсь к $_SESSION, так как cookies могут быть отключены, но хотел бы услышать мысли от вас.

спасибо заранее за ваше внимание.

6 ответов


ни

никакие большие сайты не осмелятся хранить корзину пользователя в сеансе или cookie-эти данные просто ценны.

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

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

журнал все, что вы можете.

Схема Базы Данных

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

user {
    id
    email
}

product {
    id
    name
    price
}

cart {
    id
    product_id
    user_id
    quantity
    timestamp    (when was it created?)
    expired      (is this cart still active?)
}

вы также можете разделить таблицу корзины на несколько таблиц, чтобы отслеживать изменения в корзине.

сеансы

обычные сеансы PHP состоят из двух части

  1. данные (хранятся в файле на сервере)
  2. уникальный идентификатор, присвоенный агенту пользователя (браузеру)

следовательно, это не $_SESSION vs


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

возможный подход-

используйте сеансы, если не вошли в

если пользователь не вошел в систему, вы можете хранить и извлекать предметы в корзине и списке желаний из сеанса с помощью $_SESSION в PHP

использовать базу данных при входе в

Если пользователь вошел в систему, то вы можете рассмотреть один из двух вариантов -

  • хранить элемент корзины или список пожеланий только в базе данных
  • храните элемент корзины или список пожеланий в базе данных, а также в сеансе (это сохранит некоторые из ваших запросов к базе данных)

когда пользователь входит в

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

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

получение необходимых данных

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

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

Я бы сохранил его в сеансе. Мой список пожеланий довольно длинный, и я боюсь, что он не поместится в хранилище 4K, которое может занимать COOKIE. Это заставляет вас установить время сеанса на более длительный период.

Примечание: есть некоторые страны (например, Нидерланды, где я), которые имеют очень строгую политику в отношении куки, и вы можете быть вынуждены законодательством использовать сеансы.


можно использовать оба.

недостаток $_SESSION Это то, что сеанс очищается, когда браузер закрыт.

используйте сеансы, но попытайтесь заполнить данные $_SESSION из файла cookie, если он доступен.


некоторые моменты, чтобы помочь:

Cookies:

  • информация сохраняется до истечения срока действия файла cookie (что может быть настроен вами);
  • как правило, замедляют связь между сервером и клиентом, так как он должен быть обменен между ними в каждом запросе/ответе;
  • его небезопасная форма хранения данных и легко нюхать;
  • у них также есть предел для хранения данные.

сеанс:

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

Я бы лично пошел с сессиями, так как я предполагаю, что это небольшая страница/meddium auddience. Если он растет, вам будет лучше с простой структурой БД для хранения этих данных, с планом обслуживания, чтобы получить хребет ненужных данных (например: клиенты, которые выбирают некоторые продукты, но не делают проверку).


Я бы использовал сеанс. Если у пользователя отключены cookies, сеанс не сможет начаться, так как идентификатор сеанса хранится на компьютере пользователя в файле cookie.

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

  • предотвратите удаление cookie сеанса, когда пользователь закрывает свой браузер, запустив session_set_cookie_params() С lifetime набор параметров. Эта функция нуждается бежать перед session_start()

  • вы также можете расширить, как часто сеансы очищаются от сервера, изменив настройки сбора мусора сеанса session.gc_probability, session.gc_divisor, session.gc_maxlifetime либо в php.ini или с помощью ini_set()

  • если у вас есть другие веб-сайты, работающие на сервере, и вы изменяете вышеуказанные настройки сбора мусора, вам нужно будет установить их в php.ini, поэтому они применяются ко всем веб-сайтам, или если вы используем ini_set() тогда вы также можете посмотреть на сохранение этих сеансов в другой каталог, чем другие веб-сайты, изменив session_save_path(). Снова это выполняется перед session_start(). Это предотвратит сбор мусора других веб-сайтов, очищающих ваши расширенные сеансы для одного конкретного сайта.

  • Я бы также рекомендовал установить следующие настройки сеанса в php.ini session.entropy_file = /dev/urandom, session.entropy_length = 256, session.hash_function = sha512. Это должно дать вам криптографически сильный идентификатор сеанса с вероятность столкновения крайне мала.

  • и убедитесь, что у вас есть сертификат SSL на вашем сайте, чтобы предотвратить атаки man in the middle против вашего идентификатора сеанса.

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

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

есть и другие меры, которые вы могли бы использовать, чтобы сделать ваши занятия еще сильнее. Восстанавливайте идентификатор сеанса каждые 20 минут, копируя данные. Также записывайте идентификаторы сеансов против IP-адреса в базе данных и проверить, если конкретный IP-адрес пытается отправить более X количество идентификаторов сеанса в данный момент времени, чтобы предотвратить кто-то пытается грубой силы идентификатор сеанса.

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