会话中的Rails操作和错误消息将过期

时间:2015-10-14 10:47:16

标签: ruby-on-rails session session-timeout

我正在使用此代码进行会话超时>

Yourapp::Application.config.session_store :cookie_store, 
                                     key: 'your_session_id',
                                     expire_after: 45.minutes

它的工作原理是会话变量设置为nil,但是我在session#destroy action中有一些代码,这是用户注销时发生的事情。我注意到会话到期时,不会执行此操作。

有谁知道这是为什么,以及如何实现这一目标? 另外,如何使用“Session Expired”方法将其重定向到登录页面?

由于

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为会话过期并未触及任何控制器操作。

如果您想在用户会话过期(或以其他方式注销)时进行重定向,则可以创建before_action来处理此问题。所以在你的控制器文件中,把它放在类定义之后的顶部:

before_action :user_logged_in, only: [#relevant actions which need user login, eg :show ]

在辅助方法中,创建before操作将调用的方法:

def user_logged_in
  unless user_logged_in?
    flash[:danger] = "Please log in."
    redirect_to login_url
  end
end

另一个帮助方法,返回用户是否正确登录。 (你可以将它与之前的代码结合起来,但它通常比较分开,所以你可以在其他地方使用这种方法。)

def user_logged_in?
  # some code which tests if the cookie is valid and not expired
end

注意:为了安全起见,最好不要单独依赖cookie过期时间。在这种情况下可能有意义,但通常,最好将过期时间存储在服务器上,并在上述方法中检查。

希望有所帮助!