PHP: хранить данные в Cookie или в базе данных?

172
23 июня 2018, 01:10

Подскажите, пожалуйста, как организовать хранение настроек пользователей: в cookie или в базе данных? Например, пользователь на сайте выбрал, что он из города Самары, соответственно - ему показывается информация(объявления) для этого города. Также он выбрал себе в избранное определенные позиции товаров. В результате мы имеем id города и id понравившихся товаров.

Вопрос в чем: эти данные можно установить пользователю в Cookie и при его посещении сайта получать эти идентификаторы! Но, этих данных может быть очень много!

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

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

Но насколько это оправданно? Если каждый запрос к странице будет сначала доставать данные пользователя, затем обновлять дату, чтобы определить активность пользователя. Не станет ли базе тяжко выполнять при значительной посещаемости?

Вижу, что на популярных сайтах вроде авито и т.д. есть id пользователей и никакая конкретная информация типа geo_id и т.д. не устанавливается. Как это работает, кто имеет опыт или какие мысли?

Заранее спасибо!

Answer 1

Ваш вариант с идентификатором в Cookies очень похож на существующую систему сессий в PHP. Все что записано в массив $_SESSION будет храниться на сервере в специальных файлах, а пользователь получит куку-идентификатор (phpsessid) по которой при каждом запросе данные в $_SESSION будут восстановлены.

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

Поэтому обычно используют свою собственную куку для идентификации пользователя.

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

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

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

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

READ ALSO
OpenCart, не меняется статус модуля

OpenCart, не меняется статус модуля

Устанавливаю вот такой вот модуль https://opencartforumcom/files/file/1011-dostavka-po-oblastyam-na-karte/ , но по какой-то причине не меняется его статус и он не хочет работать

264
Работа с массивом $_SESSION

Работа с массивом $_SESSION

Можно ли использовать инструкцию echo внутри массива $_SESSION? Нужно, чтобы каждый элемент массива имел уникальное имя

202
Не работает Functions.php дочерней темы

Не работает Functions.php дочерней темы

Создаю сайт на wordpress, тема onepressСоздал дочернюю тему

202