2012-09-07 84 views
4

我为我的会话使用Rails 3.2.3和active_record_store。CSRF令牌会话得到重置

我的理解是,轨道中的CSRF令牌存储在会话中,除非调用reset_session或由于某种原因会话被销毁,否则不应该重置。

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

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

我不能为一个有效的数字对正在进行的会话为什么会话[:_ csrf_token]越来越被破坏,创造一个新的令牌?

+0

经过大量的狩猎,终于想出了这个问题。我直接在会话中存储模型对象,即使在使用大小限制为65KB的活动记录会话存储之后,会话在4kb之后也会被截断,导致CRSF令牌被擦除并生成新的会话。 是啊! Blunder ...除非你有很好的理由不这样做,否则不要在会话中存储模型对象。无论如何,仍然试图找出为什么即使有一个活跃的记录会话存储后,我无法在会话中存储更大的对象。 – Ravi

+0

请回答你自己的问题。所以它关闭了。谢谢。 – Roger

回答

2

经过大量的狩猎,终于想出了这个问题。我直接在会话中存储模型对象,即使在使用大小限制为65KB的活动记录会话存储之后,会话在4kb之后也会被截断,导致CRSF令牌被擦除并生成新的会话。是啊! Blunder ...除非你有很好的理由不这样做,否则不要在会话中存储模型对象。无论如何,仍然试图找出为什么即使有一个活跃的记录会话存储后,我无法在会话中存储更大的对象。

+0

嗨Ravi,我有一个与csfr令牌和会话类似的问题。我们试图在跨域网站的iframe中加载我们的应用程序。当父网站重新加载时,我们的应用会话被清除。我们在cookie中存储会话(只是user_id)。这个问题从未解决。只是想知道你对此的想法。 –