我有一个登录方法,如下所示:
@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千字节的限制,因此我希望将这些字段排除在会话中。
发布于 2009-08-19 15:11:23
我会这样做:
session[:user] = @user.id然后创建一个像这样的before_filter:
before_filter :get_user
def get_user
@user = User.find_by_id(session[:user])
end编辑:这不是您想要的,但是如果您不能将所有的对象存储在会话变量中,您可能需要考虑这个选项。它只是一个请求,所以不会太耗费资源。此外,您还可以在用户存在的每一个页面加载时检查它,这可能对安全性很有帮助。
发布于 2009-08-19 15:18:46
Rails的设计常常帮助您朝着一个非常特定的方向前进。在这种情况下,默认情况下Rails的会话存储在cookie中,这是一个强烈的提示,表明您不应该在会话中存储大型对象。无论如何,都要存储用户ID,而不是User对象本身。
https://stackoverflow.com/questions/1300572
复制相似问题