5

我以为它们存储在 cookie 中 - 但不,cookie 检查什么也没给我。会话也不存储它们。那么,我在哪里可以找到它们?

我需要这个来直接设置它们(而不是通过flash哈希)。

4

3 回答 3

10

它们存储在您的会话存储中。自 rails 2.0 以来的默认设置是 cookie 存储,但请config/initializers/session_store.rb检查您是否使用了默认设置以外的其他内容。

于 2011-09-07T09:14:37.713 回答
2

根据APIdock : ActionController/Flash,它存储在一个会话中。

请注意,如果会话被禁用,则只有 flash.now 可以工作。

使用 flash.now 时,您的值在下一个请求中不可用。

于 2011-09-07T09:13:25.257 回答
0

我一直在寻找更详细的答案,最终通过调查找到了它。如果您的项目将其会话存储在 Postgres 数据库中,则以下内容适用。

注意:您的应用可能连接到多个数据库。我还没有弄清楚 Rails 是如何确定要使用哪些连接的。我的项目session_store.rb是空的。

您会在sessions表格中找到闪现消息。有一个名为的列data,其中包含一个 base64 编码的字符串。

如果对字符串进行解码,您会发现一个二进制 blob,其中不仅包含 flash 消息(采用编组形式,因此它们可以表示任何类型的 Ruby 对象),还包含 CSRF 令牌和其他一些内容。

整个 blob 实际上是一个编组的哈希表。它可以在 Ruby 中使用 进行解Marshal.load组,并且在进行任何更改后,可以使用 重新编组Marshal.dump

于 2017-05-12T22:02:13.457 回答