【问题标题】:Rails Session ManagementRails 会话管理
【发布时间】:2013-01-31 04:44:22
【问题描述】:

我正在尝试根据我继承的代码实现记住我的登录选项。

我有以下内容:

def login 
if request.post?
  if params[:remember_me]
    # this is where user checked the remember me box
    cookies[:login] = { :value => "XJ12", :expires => Time.now + 120}
  end

    session_user = User.authenticate(params[:user][:email], params[:user][:password])   
    if session_user

      session[:user] = session_user.id
      @user=User.find(session[:user])
      @user.update_attributes(:last_login_time => Time.now(),:is_logged => true)
      @user.save
      flash[:message]  = "Login successful."
      redirect_to "/admin"
    else
      flash[:warning] = "Your email or password is incorrect. Please re-enter."
    end
  end
end

结束

无论我做什么,cookie 都会自动设置(EXPIRES: session)。如果用户没有选择记住我选项,我想设置 cookie 10 分钟。如果他选择记住我,那么我会设置更长的时间。 我可以得到一些指导吗?

【问题讨论】:

    标签: ruby-on-rails session cookies


    【解决方案1】:

    首先,Time.now + 120 距离现在只有 2 分钟,您应该将其设置为以后的值。

    那么,这就是你的流程:

    1. 尝试获取用户时,检查是否设置了 cookie(我建议您为每个用户创建一个唯一的随机字符串,因为可以在客户端修改 cookie)
    2. 如果设置了cookie,则记录相应的用户
    3. 如果没有,请尝试会话中的基本日志
    4. 连接时,如果用户勾选了复选框,则注册 cookie

    【讨论】:

    • :active_record_store 被使用。这里的问题是无论我对 cookie 做什么,会话仍然写为 cookie。我应该改用 cookie_store 吗?
    • 是的,会话将写入一个名为 _your_app_name_session 的签名 cookie 中,但这是完全安全的。只需使用 session[] 来检索它。
    • 我恢复到 cookie_store。现在,如果没有点击记住我,我需要将会话过期设置为 10 分钟。怎么样?
    • 当我想增加用户的会话时间时,我仍然遇到问题: session[:expire_after] = 96000.seconds.from_now 不起作用。 cookie 仍然从 session_store 获取默认值,expiry_after = 1.minutes
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2012-10-11
    • 2011-04-29
    • 2011-10-22
    • 2011-08-01
    • 2012-11-12
    相关资源
    最近更新 更多