При настройке пользовательских предпочтений лучше всего использовать куки для сессии? (PHP) - PullRequest
2 голосов
/ 11 апреля 2010

Для каждого пользователя я хочу разрешить ему выбирать свои предпочтения, такие как, какие категории показывать в его профиле, какие теги они хотят видеть и т. Д. Файлы cookie будут лучше, чем сеансы, потому что у пользователей не заканчивается время их действия. выйти?

Ответы [ 5 ]

3 голосов
/ 11 апреля 2010

Я думаю, что лучшее решение - это смешать файлы cookie и базу данных - последнее для зарегистрированных пользователей.

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

EDIT:

Не используйте сеансы - они хуже, чем как на основе файлов cookie, так и на основе баз данных.

Почему сессии не очень хорошая идея? Прежде всего, они полагаются на куки (идентификатор сессии, который необходим для правильной работы системы сессий, хранится в куки, называемой SID / SESSID / SESSIONID (в большинстве случаев)), поэтому всякий раз, когда вы чистите куки, вы также теряете свою сессию. , Кроме того, сеанс доступен только в течение нескольких минут (от загрузки первой страницы до закрытия браузера или около 20 минут бездействия на веб-сайте), в то время как файлы cookie могут быть доступны в течение нескольких месяцев или даже лет!

Так как вы должны это сделать?

Существует два сценария:

  1. Когда пользователь не вошел в систему:
    Затем, когда он поменяет какое-то предпочтение, сохраните его только в cookie
  2. Когда пользователь является , вошел в систему:
    Затем, когда он изменит какое-то предпочтение, просто сохраните его в базе данных:

    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

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

1 голос
/ 11 апреля 2010

Обычно у вас есть три варианта сохранения пользовательских настроек:

  • база
  • печенье
  • сессия

При выборе между ними каждое решение предлагает различные варианты поведения:

  • сохранение
  • местонахождение (привязано к браузеру или учетной записи)
  • безопасность

Если вам нужно более длительное сохранение этих значений, вы должны поместить их в базу данных. Если вы хотите, чтобы они не требовали входа, тогда файлы cookie - лучший выбор. На самом деле нет единственно правильного ответа - это зависит от того, чего вы пытаетесь достичь.

1 голос
/ 11 апреля 2010

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

0 голосов
/ 11 апреля 2010

Файлы cookie хороши тем, что могут длиться между посещениями или «сессиями». Однако они также доступны для редактирования и чтения во всем мире. Хранение конфиденциальных данных, таких как логин, пароль, идентификатор сеанса и т. Д., Может привести к тому, что вредоносный сайт перехватит информацию о сеансе или пользователя. Также хитрый пользователь может изменить cookie, чтобы изменить уровень привилегий, или пользователя, который вошел в систему и выдать себя за него.

Сессии очень безопасны, потому что они хранятся на стороне сервера от посторонних глаз пользователей и других веб-сайтов. У них есть ограничение: все, что хранится в них, исчезает после завершения сеанса.

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

0 голосов
/ 11 апреля 2010

Какой смысл использовать куки, когда пользователь вышел из системы ??? Пользователь должен использовать веб-сайт, чтобы прочитать файл cookie и применить настройки. Как только пользователь вошел в систему, вы можете запросить базу данных и сохранить параметры в сеансах, пока пользователь не выйдет из системы.

Я рекомендую вам лучше использовать сеансы, поскольку они намного безопаснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...