ruby-on-rails - 在 Rails 3 中设置 session 超时

标签 ruby-on-rails ruby-on-rails-3 session activerecord

这看起来很简单:我试图让 Rails Active Record session 在 2 分钟后超时。因此,两分钟后我希望我的用户必须重新登录。

我只是在本地开发计算机上运行 rails 服务器(即 WebBrick)。

我知道这与 config/initalizers/session_store.rb 中的以下代码有关,但我认为我还没有完全搞清楚它:

CodedOn::Application.config.session_store :active_record_store

CodedOn::Application.configure do
    config.action_controller.session = {:expire_after => 2.minutes}
end

这似乎不起作用,或者至少我的 session 似乎没有超时。我找不到太多有关 Rails 3 方法的信息,因为我知道 Rails 2.x 中的情况已经发生了变化。

有人可以帮我吗?

最佳答案

我认为您必须手动执行此操作,因为事件记录存储未实现 expire_after 选项。因此,在您的(我假设)过滤器之前,您应该这样做:

def authenticate
  if session[:logged_in]
    reset_session if session[:last_seen] < 2.minutes.ago
    session[:last_seen] = Time.now
  else
    ... authenticate
    session[:last_seen] = Time.now
  end
end

显然,这并不完整,但它应该为您提供基本的想法。

更新:

看来该功能自 2.3 版本起就存在于 Rails 中。我找到了相关代码here 。这是 AbstractStore,它应该作为所有派生类的基类。因此,正如 dadooda 所建议的,以下方法应该有效:

Some::Application.config.session_store :active_record_store, {
  expire_after: 24.hours,
}

关于ruby-on-rails - 在 Rails 3 中设置 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860950/

相关文章:

ruby-on-rails - 在 Rails3 中选择每天的平均不同值

php - PDO 对象可以存储在 session 中吗?

ruby - session 越过。 Rails 上的 Ruby

.net - 这种 ASP.NET session 访问多用户安全技术吗?

ruby-on-rails - 使用 curl 对 Rails 应用程序的 RESTful 请求忽略 AuthenticityToken

jquery - 如何在弹出窗口中获取设备错误消息

ruby-on-rails - 确定哪些 Assets 未在 Rails 中使用?

mysql - 需要在轨道上排列自己、 child 和 child 的 child

ruby-on-rails - ActionMailer Observer 中的 Message.body 为空

ruby-on-rails - Rails 3 公司帐户有很多用户,限制对数据的访问