0

在这里问过类似的问题

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

config.action_controller.session_store = :cookie_store

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

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

这是我使用的登录操作:

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] 变量。

我需要做什么?

4

1 回答 1

-1

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

要进行故障排除,请从浏览器中删除 cookie,或者通过reset_session输入登录操作(这将使 cookie 保留在原位,但数据为空),然后删除该行以进行下一次登录。

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

应该管用。

于 2013-02-15T14:36:24.270 回答