2012-07-12 74 views
3

我正在開發一個Facebook應用程序,所以我不能靠由於P3P(隱私首選項項目)和是的,這是一個該死的疼痛(見slides 18 and 19 on this slideshare about Rails and Facebook apps爲它的照片)餅乾...如何在Rails上實現無Cookie的Flash消息?

從瀏覽器的角度來看,在facebook應用中,每個cookie都是第三方cookie。許多瀏覽器默認阻止它們。

所以我的問題是:如何在不依賴cookie的情況下實現Flash消息?

UPDATE:

我修改session_store.rb和DB相應。現在會話存儲在數據庫中,但閃存消息仍然依賴於Cookie ...有任何想法嗎?

更新#2:

我終於找到一種解決方法,請參閱我的回答如下。最好的事情是阿賈克斯一切(根據上述鏈接slideshare),但作爲一個快速解決我的解決方案應該工作。

回答

3

我終於找到了解決辦法實施我自己的(簡單)的提示信息並使它們通過該PARAMS從一個請求到另一個。

首先,我在application_controller.rb覆蓋default_url_options追加到每一個請求:my_flash PARAM:在application_controller.rb

def default_url_options 
    { :my_flash => @my_flash } 
end  

然後,一如既往,我寫了一個my_flash_from_params的before_filter設置@my_flash變量:

def my_flash_from_params 
    @my_flash = params[:fb_flash] 
end 

最後我呈現了以下_my_flash.html.erb部分在application.html.erb

<div class="my_flash"> 
    <%= my_flash %> 
</div> 

呼喚:

<%= render :partial => "layouts/my_flash", :locals => {:my_flash => @my_flash} if @my_flash %> 

如果你想嘗試這種解決方案也看到this answer about default_url_options rewriting

0

Flash消息建立在會話之上。因此,如果更改會話存儲以使用數據庫,則仍然可以依靠閃存。這可以通過編輯config/initializers/session_store.rb並按照該文件中的說明輕鬆完成。

下面是關於該主題的更多信息:Action Controller Overview -> Session

+0

我按照說明操作,現在會話存儲在數據庫中,但閃存消息仍依賴於Cookie!現在,這很奇怪......任何想法? – Darme 2012-07-13 10:34:14

+1

根據文檔,你是對的「所有會話商店都使用cookie來存儲每個會話的唯一ID(您必須使用cookie,因爲Rails不允許您在URL中傳遞會話ID,因爲這不太安全)「。對不起:( – alf 2012-07-13 14:13:06

+0

此外,處理數據庫中的會話不適用於多dynos應用程序......處理沒有cookie的會話真的很痛苦。不管怎樣,謝謝你。 – Darme 2012-07-13 16:22:24