rails中的会话 - 动态

时间:2013-02-15 14:06:24

标签: ruby-on-rails session cookies

我问了类似问题here

现在我遇到了最后一个问题。 我用:

config.action_controller.session_store = :cookie_store

ActionController::Base.session = { 
     #:domain      => :all,
     :key         => 'xxxxxxxx',
     :secret      => 'xxxxxxxxxxx...',
     :expire_after => 5.minutes
      }

这很好用,它确实设置了一个5分钟不活动的cookie。 我现在要做的是当用户登录点击之前记住我,我想给它一个更长的超时值:

这是我使用的登录操作:

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"
      #cookies[:userd] = {:value => session_user, :expires => Time.now + 12}
      if params[:remember_me]

        #base.request.session_options = request.session_options.dup
        #base.request.session_options[:expire_after]= 10000.minutes
        #base.request.session_options.freeze
        #session[:expire_after] = 96000.seconds.from_now
        #ActionController::Base.session_options[:expire_after] = 1.years
        #session[:expires] = Time.now + 1
      session[:expires_at] = 5.days
      end
    else
      flash[:warning] = "Your email or password is incorrect. Please re-enter."
    end
  end

正如你在IF中看到的那样(当用户点击时执行记住我),我尝试了许多不同的方法,但除了ActionController :: Base.session_options [:expire_after] = 1.years之外,它们都没有工作,但是因为它似乎永久地覆盖了[expire_after]变量。

我需要做什么?

1 个答案:

答案 0 :(得分:-1)

是不是重写了ActionController :: Base设置你想要的?如果你把它设置为一年,那你所说的是“永久性的”吗?删除If块中除第5个注释行之外的所有行,并测试会话中存储的内容以供下次登录。如果持续时间超过5分钟,您已回答了自己的问题。

要进行故障排除,请从浏览器中删除Cookie,或将reset_session放入您的登录操作(这将使Cookie保留在原位,但数据为空),然后删除该行以便下次登录。< / p>

ActionController::Base.session_options[:expire_after] = 1.years

应该有用。