Я думаю, что лучшее решение - это смешать файлы cookie и базу данных - последнее для зарегистрированных пользователей.
Печенье в порядке, потому что пользователю не нужно заходить на ваш сайт, чтобы сохранить некоторые настройки.
Но если кто-то зайдет на вашу страницу, вы получите возможность сохранять его настройки в более стабильной базе данных исходного сервера. Тогда эти настройки доступны с каждого компьютера и не исчезнут после «очистки браузера».
EDIT:
Не используйте сеансы - они хуже, чем как на основе файлов cookie, так и на основе баз данных.
Почему сессии не очень хорошая идея? Прежде всего, они полагаются на куки (идентификатор сессии, который необходим для правильной работы системы сессий, хранится в куки, называемой SID
/ SESSID
/ SESSIONID
(в большинстве случаев)), поэтому всякий раз, когда вы чистите куки, вы также теряете свою сессию. , Кроме того, сеанс доступен только в течение нескольких минут (от загрузки первой страницы до закрытия браузера или около 20 минут бездействия на веб-сайте), в то время как файлы cookie могут быть доступны в течение нескольких месяцев или даже лет!
Так как вы должны это сделать?
Существует два сценария:
- Когда пользователь не вошел в систему:
Затем, когда он поменяет какое-то предпочтение, сохраните его только в cookie
Когда пользователь является , вошел в систему:
Затем, когда он изменит какое-то предпочтение, просто сохраните его в базе данных:
INSERT INTO preference (user_id, key, value) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE value = ?;
Это пример для MySQL , но вы можете сделать то же самое в других СУБД.
А как вы получаете окончательные предпочтения?
// That's VERY unsafe code... you HAVE TO do necessary validation (this is only an example)
$preferences = unserialize($_COOKIES['preferences']);
if (/* user is logged in */) {
$databasesPreferences = result_of_query('SELECT key, value FROM preference WHERE user_id = ?');
$preferences = array_merge($preferences, $databasesPreferences);
}
Sumary
Это решение предоставляет вам наиболее стабильный способ обработки пользовательских настроек как вошедших, так и не вошедших в систему пользователей.