Подтвердить что ты не робот

Сохранение корзины покупок: $_SESSION или cookie браузера?

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

Заранее благодарим вас за внимание.

4b9b3361

Ответ 1

Ни

Никакие крупные сайты не посмеют хранить корзину пользователя в сеансе или 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 состоят из двух частей

  • Данные (хранятся в файле на сервере)
  • Уникальный идентификатор, предоставляемый пользовательскому агенту (браузеру)

Следовательно, это не $_SESSION vs $_COOKIE - it $_SESSION + $_COOKIE= "session". Тем не менее, есть способы изменить это, используя один зашифрованный файл cookie, который содержит данные (и, следовательно, вам не нужен идентификатор для поиска данных). Другой распространенный подход - хранить данные в memcached или базе данных вместо файловой системы, чтобы несколько серверов могли получить к ней доступ.

Что говорит @Travesty3, так это то, что вы можете иметь два cookie - один для сеанса, а другой - файл cookie cookie, который хранит меня во время регистрации (который существует дольше, чем файл cookie сеанса), или копия данных внутри отдельного файла cookie.

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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

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

Когда пользователь входит в систему

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

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

Получение требуемых данных

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

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

Ответ 4

Вы можете использовать оба.

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

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

Ответ 5

Некоторые пункты, которые помогут:

Cookies

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

Сеанс:

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

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

Ответ 6

Я бы использовал сеанс. Если пользователь отключил 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 на вашем сайте, чтобы предотвратить средний уровень атаки вашего идентификатора сеанса.

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

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

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

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