2013-09-05 4 views
0

Я видел некоторую информацию о SO и Google в отношении хранения пользовательских данных для сеансов, но большинство из них были для PHP, а не для Rails.Хранение данных пользователя в сеансе - стандартная практика

Кроме того, я смотрел Dangers of Model in Session на RailsCasts.

Предположим, у меня есть пользователь, который входит в систему, и я хочу получить доступ к некоторым основным настройкам от пользователя, например: почтовый индекс, высота, вес и, возможно, еще 10 вещей, которые я хотел бы получить позже.

Должен ли я?

  1. Храните эти 10 вещей в переменной хеш-сессии?

    например, session[:user_prefs] = User.find(:first)

  2. Просто хранить идентификатор пользователя в качестве переменной Sesion, а затем выполнять запросы позже получить доступ к почтовый индекс, рост, вес и т.д.?

    например, session[:user_id] = User.find(:first).id

  3. Или есть что-то совершенно другое, что я должен делать?

Я не уверен, какая стандартная практика кодирования или лучшая практика для этого сценария.

Любая помощь будет отличной.

+0

Большие объекты сеанса, очевидно, не будут работать, если вы специально используете хранилище cookie по умолчанию. Сеансы также могут быть в БД, и у вас будет одинаковое наказание, и это будет просто автоматизировано. Нет «нужно», есть только «варианты». –

ответ

0

Вариант 2 - путь.

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

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

Смежные вопросы