我正在寻找一种解决方案,允许我定期检查用户会话是否已过期,如果已过期,则将他重定向到登录页面。
我正在使用 Authlogic gem,所以我正在做的是调用一个对 current_user 进行测试的函数。
我的 USER_SESSION_TIMEOUT 是 5 分钟,所以我每 5:10 分钟进行一次 ajax 调用。
<%= periodically_call_remote :url => {:controller => 'user_session', :action => 'check_session_timed_out'}, :frequency => (USER_SESSION_TIMEOUT + 10.seconds) %>
def check_session_timed_out
if !current_user
flash[:login_notice] = "Your session timed out due to a period of inactivity. Please sign in again."
render :update do |page|
page.redirect_to "/user_sessions/new"
end
else
render :nothing => true
end
end
我注意到每次调用 current_user 时都会更新用户对象,因此会话会更新为 5 分钟。
只打开一个选项卡时没有问题,但如果我每次调用 check_session_timed_out current_user 时都有 2 个选项卡,则更新用户,因此会话永不过期。
任何的想法?谢谢