我有一个基于Rails 2构建的应用程序。如果用户打开同一个应用程序的两个实例(dev,uat或任意两个),则该用户活动时将注销。同样,此行为也不一致。有时会在登录后2分钟内发生,有时会在半小时内发生一次。
还要注意的一件非常有趣的事情是:如果我禁用CSRF令牌验证,则除非会话超时或用户自愿注销,否则用户永远不会注销。
-更新- 在深入研究该问题之后,我发现CSRF并非导致此问题的原因。会话ID正在从Cookie中删除。可能是造成此问题的原因
答案 0 :(得分:0)
因此,正如我在问题中已经说过的那样,CSRF验证不是注销问题的原因。因此,我进行了更深入的研究,发现session_id cookie被随机删除了,也就是说,当我尝试进一步使用该应用程序时,它显然已注销。
因此,解决此问题的方法是确保不允许删除session_id cookie。为此,我将Cookie标记为安全。尽管我仍然无法找出删除Cookie的根本原因。
我正在使用SqlSessionStore存储会话信息。以下是我提出的解决方案:
ActionController::Dispatcher.middleware.swap(:"ActiveRecord::SessionStore",
SqlSessionStore, {:secure => true})