代码之家  ›  专栏  ›  技术社区  ›  Keith Palmer Jr.

RubyonRails会话存储-如何*不*在会话存储中存储某些字段?

  •  1
  • Keith Palmer Jr.  · 技术社区  · 17 年前
    • 警告:完全新手到罗尔和鲁比警报!*

    我的登录方法如下:

    @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 回复  |  直到 17 年前
        1
  •  2
  •   marcgg    17 年前

    我会这样做:

    session[:user] = @user.id
    

    然后创建一个前置过滤器,如下所示:

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

    编辑:这不是您要查找的对象,但是如果您不能将所有对象存储在会话变量中,那么您可能需要考虑使用此选项。这只是一个请求,因此不会占用太多资源。另外,像这样,您可以在每次页面加载时检查用户是否存在,这可能对安全性有所帮助。

        2
  •  0
  •   John Topley    17 年前

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