我正在使用此代码进行会话超时>
Yourapp::Application.config.session_store :cookie_store,
key: 'your_session_id',
expire_after: 45.minutes
它的工作原理是会话变量设置为nil,但是我在session#destroy action中有一些代码,这是用户注销时发生的事情。我注意到会话到期时,不会执行此操作。
有谁知道这是为什么,以及如何实现这一目标? 另外,如何使用“Session Expired”方法将其重定向到登录页面?
由于
答案 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过期时间。在这种情况下可能有意义,但通常,最好将过期时间存储在服务器上,并在上述方法中检查。
希望有所帮助!