Хранилище сессий в Ruby on Rails - как не хранить определенные поля в хранилище сессий? - PullRequest
1 голос
/ 19 августа 2009
  • ВНИМАНИЕ: Полностью новичок в RoR и Ruby! *

У меня есть метод входа, который выглядит следующим образом:

@user = Person.find(:first, :conditions => ["email=?", params[:email]])
if @user and @user.password==params[:user_password]
   session[:user] = @user
else
   flash[:warn] = 'Invalid password!'

Однако пользовательская запись может иметь размер очень , поэтому я не хочу сохранять всю пользовательскую запись в моем сеансе cookie.

Как я могу изменить этот код, чтобы конкретное поле не не сохранялось в сеансе? Есть два поля, которые могут иметь размер очень большой (очень большие данные профиля пользователя) и не будут соответствовать пределу 4 килобайта сеанса cookie, поэтому я хочу исключить их из сохранения в сеансе.

Ответы [ 2 ]

2 голосов
/ 19 августа 2009

Я бы сделал:

session[:user] = @user.id

А затем создайте before_filter примерно так:

before_filter :get_user

def get_user
  @user = User.find_by_id(session[:user])
end

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

0 голосов
/ 19 августа 2009

Конструкция Rails часто служит для того, чтобы направлять вас в очень конкретном направлении. В этом случае тот факт, что по умолчанию сеансы Rails хранятся в cookie, является сильным намеком на то, что в сеансе не следует хранить большие объекты. Обязательно сохраните идентификатор пользователя, но не сам объект User.

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