Intereting Posts
Меню PHP MYSQL в архиве по месяцам и месяцам Вставка данных в MySql из php Laravel – Valet 2. * возвращает только «он работает!» Установите цену товара в корзину WooCommerce до нуля, если продукт уже куплен Обнаружение мобильного или настольного браузера и перенаправление на соответствующую веб-страницу Как сделать URL-адрес с расширением без ссылки на PHP-сайт? Почему фильтр не работает, когда кнопка возврата в браузере нажата в laravel? Недействительные параметры SOS для последовательного JPEG PHP get_called_class () альтернатива Динамически создавать уникальный идентификатор для массива полей ввода, используя Javascript как можно перенаправить домен без www на www в laravel 4? преобразовать структуру дерева в php-массив php-массив. не могу получить результат, который я желаю. Помоги мне Существует ли разница между тернарным оператором и условием? Does die () завершает сеанс в PHP?

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

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

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

ни

Никакие крупные сайты не осмелятся хранить корзину пользователя в сеансе или в 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 $_COOKIE – это $_SESSION + $_COOKIE = "session". Тем не менее, есть способы изменить это, используя один зашифрованный файл cookie, который содержит данные (и, следовательно, вам не нужен идентификатор для поиска данных). Другим распространенным подходом является сохранение данных в memcached или базе данных вместо файловой системы, чтобы несколько серверов могли получить к ней доступ.

То, что @ Travesty3 говорит, состоит в том, что у вас могут быть два файла cookie – один для сеанса, а другой – либо «сохранить меня в системе», который хранится в cookie (который существует дольше, чем файл cookie сеанса), либо копия данных внутри отдельного файла cookie ,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Печенье:

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

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

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

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

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