用户关闭浏览器后或30分钟后,如何在Rails中使会话失效?以先发生者为准?
我在session_store.rb
设置expire_after: nil || 30.minutes
时尝试过但不起作用。
Rails 3.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
 代码>