我有一个如下所示的登录方法:
@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千字节限制,所以我想排除那些存储在会话中。
答案 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
对象本身。