我以为它们存储在 cookie 中 - 但不,cookie 检查什么也没给我。会话也不存储它们。那么,我在哪里可以找到它们?
我需要这个来直接设置它们(而不是通过flash
哈希)。
我以为它们存储在 cookie 中 - 但不,cookie 检查什么也没给我。会话也不存储它们。那么,我在哪里可以找到它们?
我需要这个来直接设置它们(而不是通过flash
哈希)。
它们存储在您的会话存储中。自 rails 2.0 以来的默认设置是 cookie 存储,但请config/initializers/session_store.rb
检查您是否使用了默认设置以外的其他内容。
根据APIdock : ActionController/Flash,它存储在一个会话中。
请注意,如果会话被禁用,则只有 flash.now 可以工作。
使用 flash.now 时,您的值在下一个请求中不可用。
我一直在寻找更详细的答案,最终通过调查找到了它。如果您的项目将其会话存储在 Postgres 数据库中,则以下内容适用。
注意:您的应用可能连接到多个数据库。我还没有弄清楚 Rails 是如何确定要使用哪些连接的。我的项目session_store.rb
是空的。
您会在sessions
表格中找到闪现消息。有一个名为的列data
,其中包含一个 base64 编码的字符串。
如果对字符串进行解码,您会发现一个二进制 blob,其中不仅包含 flash 消息(采用编组形式,因此它们可以表示任何类型的 Ruby 对象),还包含 CSRF 令牌和其他一些内容。
整个 blob 实际上是一个编组的哈希表。它可以在 Ruby 中使用 进行解Marshal.load
组,并且在进行任何更改后,可以使用 重新编组Marshal.dump
。