Ruby on Rails会话存储 - 如何*不*存储会话存储中的某些字段?

时间:2009-08-19 15:09:10

标签: ruby-on-rails

  • 警告:完成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会话中。

如何修改此代码,以便特定字段不会存储在会话中?有两个字段可以获得非常大(非常大的用户配置文件数据),并且不适合cookie会话4千字节限制,所以我想排除那些存储在会话中。

2 个答案:

答案 0 :(得分:2)

我愿意:

session[:user] = @user.id

然后创建一个像这样的before_filter:

before_filter :get_user

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

编辑:这不是您要查找的内容,但如果您无法将所有对象存储在会话变量中,则可能需要考虑此选项。这只是一个请求所以它不会太耗费资源。除此之外,您可以检查用户存在的每个页面加载,这可能是有帮助的,安全性明智。

答案 1 :(得分:0)

Rails的设计通常可以引导您走向非常具体的方向。在这种情况下,默认情况下Rails的会话存储在cookie中这一事实强烈暗示您不应该在会话中存储大对象。无论如何都要存储用户ID,而不是User对象本身。