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

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

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

id
unique_cookie_hash
site_preferences

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

Когда гость вносит изменения, сайт попытается выполнить запрос UPDATE на свой unique_cookie_hash.

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

Спасибо.


person coopertrooper    schedule 14.04.2011    source источник


Ответы (3)


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

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

person alex    schedule 14.04.2011
comment
Согласен, было бы лучше, если бы site_preferences хранились в отдельных столбцах или в другой таблице. Вам вообще не нужно было бы хранить site_preferences на стороне клиента и просто хранить там идентификатор, а затем искать их, когда идентификатор присутствует в файле cookie. - person Dylan Valade; 14.04.2011
comment
Круто, спасибо Алекс и Дилан! Я рассматриваю возможность использования отдельных столбцов, но большая часть настроек — это переключатели для фильтрации отображаемой информации. (около 30), и что-то звучит хаотично избыточным в таком количестве истинных/ложных полей. И это потребует немного большего обслуживания запросов для добавления будущих опций. - person coopertrooper; 14.04.2011

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

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

person Henry Merriam    schedule 14.04.2011

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

person Your Common Sense    schedule 14.04.2011
comment
Спасибо за ответ, полковник Шрапнель. Да, я думал об этом. Я думаю, что сразу же перешел к поиску решения, связанного с базой данных, потому что пользователь потенциально мог изменить только хешированный ключ, используемый для поиска, а не пытаться изменить значения параметров на какое-то свое собственное причудливое значение. Хотя с надлежащей проверкой безопасности я уверен, что это не будет проблемой. - person coopertrooper; 14.04.2011
comment
Не так хорошо, если бы они хотели, чтобы их настройки сохранялись в разных браузерах/компьютерах. - person alex; 14.04.2011
comment
@Col Хорошо, если их предпочтения сохранены в их файлах cookie, а затем они входят в систему на другом компьютере, их предпочтения не будут сохранены. Если у них есть логин, было бы неплохо сохранить состояние их предпочтений в базе данных сайта. - person alex; 14.04.2011
comment
@alex у них нет логина. - person Your Common Sense; 14.04.2011
comment
@Col В ОП упоминаются зарегистрированные и незарегистрированные пользователи. Похоже, они входят в систему для меня. - person alex; 14.04.2011
comment
@алекс конечно. для пользователя, который не вошел в систему, он говорит. В любом случае это не имеет значения, так как незарегистрированный пользователь, который входит в систему, не имеет смысла. - person Your Common Sense; 14.04.2011