关闭浏览器后或Rails 30分钟后过期会话?

时间:2018-03-12 13:23:22

标签: ruby-on-rails ruby session

用户关闭浏览器后或30分钟后,如何在Rails中使会话失效?以先发生者为准?

我在session_store.rb设置expire_after: nil || 30.minutes时尝试过但不起作用。

Rails 3.2

2 个答案:

答案 0 :(得分:1)

您可以在初始化文件 config / initializers / session_store.rb

中配置应用程序的会话信息
YourApp::Application.config.session_store :cookie_store, 
  :key => '_my_session', 
  :expire_after => 30.minutes

如果您正在使用,那么Devise有一个可以使用的超时模块。

在您的用户模型中,您将包括:使用您的设计模型进行超时处理,在 devise.rb 初始值设定项中,您可以将其配置为:

  # ==> Configuration for :timeoutable
  # The time you want to timeout the user session without activity. After this
  # time the user will be asked for credentials again. Default is 30 minutes.
  config.timeout_in = 30.minutes

您必须将nil值的 expire_after 键添加到选项中:

Rails.application.config.session_store :cookie_store, key: '_app_session', expire_after: nil

应用此更改后,会话将在用户关闭浏览器时过期。您可以阅读有关Cookie过期here

的更多信息

答案 1 :(得分:0)

好吧,问题在于缓存。我不得不在登录页面上限制缓存,以避免显示主页的延迟,就好像用户已登录一样。





在application_controller.rb中我设置了以下内容:




  before_filter:set_cache_headers
 def set_cache_headers
 expires_now
 end
  




在session_store.rb中我将会话存储设置为




  expire_after:nil || 30.minutes