ruby-on-rails-3.2 – 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令牌被擦除并生成新的令牌.是啊!失误……永远不要在会话中存储模型对象,除非你有充分的理由不这样做.无论如何仍然试图弄清楚为什么即使在拥有一个活跃的记录会话存储后,我也无法在会话中存储更大的对象.

点赞