我目前正在为我的Rails应用程序使用基于ActiveRecord的会话存储,并且我有一个后台进程,它每30分钟清除一次不活动的会话。
我想切换到Rails的新的基于cookie的会话存储,但是我如何将会话的过期时间设置为30分钟,而不是默认的‘在会话结束时’值?
发布于 2010-07-28 17:24:49
在办公室的一次谈话中,我偶然发现了这个问题。为了完整起见,我发现可以在一段时间不活动后终止会话,这是Rails内置的。在config/environment.rb ment.rb中,执行类似以下内容的操作:
config.action_controller.session = {
:key => 'whatever',
:secret => 'nottellingyou',
:expire_after => 30.minutes
}请查看lib/action_controller/session/cookie_store.rb#114,了解该选项(显然没有文档)的实际应用。看起来自从2008年12月迁移到Rack sessions以来,它就已经存在了。
发布于 2008-10-30 17:54:22
理想情况下,您可能希望向environment.rb添加类似以下内容:
session :session_expires => 1.day.from_now但这是行不通的,因为当应用程序启动时,代码只运行一次,因此第二天创建的所有会话都是在过去到期的。
我通常将session_expires设置为远在未来的某个时间(6个月)。然后在我的应用程序控制器上的before_filter中手动设置和检查session[:expires]日期,并在该日期过后重置会话。
这使得在登录时添加'Keep me logged for ___‘选项变得非常容易,你只需设置session[:expires] = Time.now + ___
发布于 2013-01-27 12:44:06
在经历了大量的痛苦和试验之后,可以在Rails3.x中找到,您需要在每个请求中的After过滤器中设置自定义会话参数
class ApplicationController < ActionController::Base
after_filter :short_session
...
def short_session
request.session_options = request.session_options.dup
request.session_options[:expire_after] = 1.minute
request.session_options.freeze
endhttps://stackoverflow.com/questions/249797
复制相似问题