我目前正在为我的Rails应用程序使用基于ActiveRecord的会话存储,我有一个后台进程,每30分钟清除一次非活动会话.
我想切换到Rails新的基于cookie的会话存储,但是如何将会话的到期时间设置为30分钟,而不是默认的"会话结束时"值?
我在办公室里谈话后偶然发现了这个问题.仅仅为了完整起见,我发现可以在一段时间不活动后使会话过期,并且它已内置到Rails中.在config/environment.rb中,执行以下操作:
config.action_controller.session = { :key => 'whatever', :secret => 'nottellingyou', :expire_after => 30.minutes }
检查lib/action_controller/session/cookie_store.rb#114中的(显然未记录的)选项.看起来自从2008年12月转向Rack会议以来它一直存在.
理想情况下,您需要向environment.rb添加类似这样的内容:
session :session_expires => 1.day.from_now
但这不起作用,因为代码只在APP启动时运行一次,因此第二天所有会话都是在过去的过期时创建的.
我通常session_expires
在未来(6个月)设定一段时间.然后手动设置并检查应用程序控制器上的session[:expires]
日期,before_filter
并在该日期过后重置会话.
这使得在登录时添加"让我登录___"选项非常容易,您只需设置即可 session[:expires] = Time.now + ___