Использование файлов cookie с PHP и MySQL — хорошая практика?

#php #mysql #cookies

#php #mysql #файлы cookie

Вопрос:

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

Есть ли общий способ сделать это? Я думал создать дополнительную таблицу базы данных с этими полями:

 id
unique_cookie_hash
site_preferences
  

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

Когда гость внесет изменения, сайт попытается выполнить запрос на ОБНОВЛЕНИЕ для их unique_cookie_hash.

Я предполагаю, что это сработает (и что именно так это делает большинство сайтов?), Но поскольку для меня это более новая концепция, мне было интересно, знает ли кто-нибудь о каких-либо хороших руководствах или «подсказках», на которые следует обратить внимание при использовании этого метода.

Спасибо.

Ответ №1:

Это сработало бы, просто обратите внимание, что, сериализуя ваши параметры в строку JSON, вы не сможете ничего из них выбрать.

Итак, если вы хотите узнать, скольким зарегистрированным пользователям нравится цветовая схема A, например, вам нужно будет выполнить весь код на PHP (по крайней мере, не громоздким способом).

Комментарии:

1. Согласен, было бы лучше хранить site_preferences в отдельных столбцах или в другой таблице. Вам вообще не нужно было бы хранить site_preferences на стороне клиента, а просто хранить идентификатор там, а затем просматривать их, когда идентификатор присутствует в файле cookie.

2. Круто, спасибо Алексу и Дилану! Я рассматриваю возможность использования отдельных столбцов, но большая часть настроек — это переключатели для фильтрации отображаемой информации. (около 30) и что-то просто кажется хаотично избыточным в таком количестве полей true / false. И это потребовало бы немного большего обслуживания запросов для добавления будущих опций.

Ответ №2:

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

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

Ответ №3:

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

Комментарии:

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

2. Не так хорошо, если они хотели, чтобы их настройки сохранялись в разных браузерах / компьютерах.

3. @Col Ну, если их предпочтения сохраняются в их файлах cookie, а затем они входят в систему с другого компьютера, их предпочтения не будут сохранены. Если у них есть логин, было бы неплохо сохранить состояние их предпочтений в базе данных сайта.

4. @alex у них нет логина.

5. @Col В OP упоминаются зарегистрированные и незарегистрированные пользователи. Похоже, они заходят ко мне.