为什么合法用户会不自觉地注销?

Why is a legitimate user getting logged out Involuntarily?

我有一个基于 Rails 构建的应用程序 2. 如果用户打开同一应用程序的两个实例(dev、uat 或任意两个),它会在用户处于活动状态时注销。这种行为也是不一致的。有时登录后2分钟内发生,有时半小时内发生一次。

还有一件非常有趣的事情需要注意,如果我禁用 CSRF 令牌验证,除非会话超时或用户自愿注销,否则用户永远不会注销。

--更新-- 在深入研究这个问题后,我发现 CSRF 不是这个问题的原因。会话 ID 正在从 cookie 中删除。问题的可能原因是什么

所以正如我在问题中所说的那样,CSRF 验证不是注销问题的原因。所以我深入挖掘,发现 session_id cookie 被随机删除,当我尝试进一步使用该应用程序时,它显然被注销了。

所以解决这个问题的方法是确保 session_id cookie 不允许被删除。为此,我将 cookie 标记为安全。虽然我还是没能找出这个cookie删除的根本原因。

我正在使用 SqlSessionStore 来存储会话信息。以下是我提出的修复:

ActionController::Dispatcher.middleware.swap(:"ActiveRecord::SessionStore",
                                             SqlSessionStore, {:secure => true})