CSRF令牌会话被重置



我在会话中使用Rails 3.2.3和active_record_store。

据我所知,rails中的CSRF令牌存储在会话中,除非调用reset_session或由于某种原因会话被破坏,否则不应重置。

但在某些地方,当通过ajax加载远程表单时,它包含的真实性令牌与该页面上META标记中指定的令牌不同。因此,在提交该表单时导致无效令牌错误和reset_session。

def form_authenticity_token
  session[:_csrf_token] ||= SecureRandom.base64(32)
end

我无法理解一个有效的正在进行的会话,为什么会话[:_csrf_token]被破坏并创建一个新的令牌?

经过一番寻找,终于发现了这个问题。我将模型对象直接存储在会话中,尽管在使用了大小限制为65KB的活动记录会话存储后,会话在4kb后被截断,这导致CRSF令牌被擦除,并生成了一个新的令牌。是 啊错误除非有充分的理由,否则永远不要在会话中存储模型对象。无论如何,我仍在试图弄清楚为什么即使在有了活动的记录会话存储之后,我也无法在会话中存储更大的对象。

最新更新