2011-09-07 120 views
5

我以爲他們被存儲在餅乾 - 但不,檢查餅乾沒有給我什麼。會話不會存儲它們。那麼,我可以在哪裏找到它們?閃存消息存儲在哪裏?

我需要這個直接設置它們(而不是通過flash散列)。

+1

您需要設置它們,但不使用閃存變量。這甚至有意義嗎?只是要求瞭解你想達到的目標。 – pduersteler

+0

如果它們存儲在cookie中,我會直接設置它們:'cookies [:flash] [:notice] =「Hello World!」'。但是他們存儲在別的地方。所以問題是:他們在哪裏存儲:) – fl00r

+0

來自railsguides: flash是'會話的特殊部分',每次請求都會清除它。 所有的會話存儲都使用一個cookie爲每個會話存儲一個唯一的ID(您必須使用cookie,Rails將不允許您在URL中傳遞會話ID,因爲這不太安全)。 我想如果我們正在使用cookieStore來存儲會話數據,那麼flash將被存儲在cookies中。 一般我們只使用cookieStore,所以我認爲flash消息應該在cookie [:session]中的某個地方。 那麼我是新手在鐵軌。糾正我,如果我錯了。 – rtcoms

回答

7

它們被儲存在in your session store。自rails 2.0以來的默認值是cookie存儲,但請檢查config/initializers/session_store.rb以檢查您是否使用默認值以外的值。

2

根據APIdock : ActionController/Flash,它存儲在一個會話中。

請注意,如果會話被禁用,則只有flash.now可以使用。

當使用flash.now時,您的值在下一個請求中不可用。

+0

我相信你鏈接到http://apidock.com/rails/ActionDispatch/Request/flash,'ActionController :: Flash'只存在於rails 1.0中。 –

+0

哎呦,你是 – pduersteler

+0

你可以編輯你的答案然後;-) –

0

我在尋找更詳細的答案,最後我通過調查找到了答案。如果您的項目將會話存儲在Postgres數據庫中,以下情況適用。

注意:您的應用可能連接到多個數據庫。我還沒有弄清楚Rails如何確定使用哪些連接。我的項目的session_store.rb是空的。

您會在sessions表中找到閃光消息。有一列叫做data,它包含一個base64編碼的字符串。

如果你解碼字符串,你會發現一個二進制blob,它不僅包含flash消息(以編組形式,所以它們可以表示任何類型的Ruby對象),還包含CSRF標記和其他一些東西。

整個blob實際上是一個編組散列表。可以使用Marshal.load在Ruby中取消編組,在做出任何更改後,可以使用Marshal.dump重新編組。