На веб-сайте электронной коммерции без имени пользователя / входа в систему, чтобы сохранить данные корзины, было бы лучше использовать переменную 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 состоят из двух частей
Следовательно, это не $_SESSION
vs $_COOKIE
– это $_SESSION
+ $_COOKIE
= "session". Тем не менее, есть способы изменить это, используя один зашифрованный файл cookie, который содержит данные (и, следовательно, вам не нужен идентификатор для поиска данных). Другим распространенным подходом является сохранение данных в memcached или базе данных вместо файловой системы, чтобы несколько серверов могли получить к ней доступ.
То, что @ Travesty3 говорит, состоит в том, что у вас могут быть два файла cookie – один для сеанса, а другой – либо «сохранить меня в системе», который хранится в cookie (который существует дольше, чем файл cookie сеанса), либо копия данных внутри отдельного файла cookie ,
Я бы сохранил его на СЕССИИ. Мой список пожеланий довольно длинный, и я боюсь, что он не поместится в хранилище 4K, которое может занять COOKIE. Это заставляет вас установить время сеанса на более длительный период.
примечание: есть некоторые страны (например, Нидерланды, где я), которые имеют очень строгую политику в отношении куки-файлов, и вы можете заставить законодательство использовать Сеансы.
Как отметил Xeoncross, очень важно хранить любую возможную информацию для анализа. Поэтому нельзя полностью полагаться на сеансы и файлы cookie.
Возможный подход –
Использовать сеансы, если они не вошли в систему
Если пользователь не вошел в систему, вы можете хранить и извлекать элементы корзины и элементы списка пожеланий из сеанса, используя $_SESSION
в PHP
Использовать базу данных при входе в систему
Если пользователь зарегистрирован, вы можете рассмотреть один из двух вариантов –
Когда пользователь входит в систему
Когда пользователь войдет в систему, вы получите все элементы корзины и элементы списка пожеланий из сеанса и сохраните их в базе данных.
Это сделает данные постоянными, даже если пользователь выйдет из системы или изменит машину, но пока пользователь не выполнит вход в систему, нет возможности хранить информацию на постоянной основе, чтобы она не была постоянной.
Получение требуемых данных
Всякий раз, когда вы пытаетесь получить доступ к тележке или списку желаний, выполните следующую проверку:
Вы можете подумать об использовании обоих.
Недостатком с $_SESSION
является то, что сеанс очищается, когда браузер закрыт.
Используйте сеансы, но пытайтесь заполнить данные $ _SESSION из файла 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 и может исчезнуть в любое время. Единственный способ по-настоящему убедиться, что пользователь не потерял свою тележку, – это сначала войти в систему и сохранить в базе данных.