我问了类似问题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]变量。
我需要做什么?
答案 0 :(得分:-1)
是不是重写了ActionController :: Base设置你想要的?如果你把它设置为一年,那你所说的是“永久性的”吗?删除If
块中除第5个注释行之外的所有行,并测试会话中存储的内容以供下次登录。如果持续时间超过5分钟,您已回答了自己的问题。
要进行故障排除,请从浏览器中删除Cookie,或将reset_session
放入您的登录操作(这将使Cookie保留在原位,但数据为空),然后删除该行以便下次登录。< / p>
ActionController::Base.session_options[:expire_after] = 1.years
应该有用。