如何在Rails上实现无cookie的Flash消息?

我正在开发一个Facebook应用程序,所以我不能依赖于P3P (隐私首选项目),这是一个该死的痛苦(参见幻灯片共享的幻灯片18和19关于Rails和Facebook应用程序的图片) …

在Facebook应用程序中,从浏览器的角度来看,每个cookie都是第三方cookie 。 许多浏览器默认阻止它们。

所以我的问题是: 如何在不依赖cookie的情况下实现Flash消息?

更新:

我相应地修改了session_store.rb和DB。 现在会话存储在数据库中但闪存消息依然依赖于cookie …请问有什么想法吗?

更新#2:

我终于找到了一个解决方法,请参阅下面的答案。 最好的办法是ajax一切 (根据上面链接的slidehare)但作为一个快速修复我的解决方案应该工作。

我终于找到了一个解决方法,实现了我自己的(简单的)flash消息,并将它们从一个请求传递给另一个请求。

首先,我覆盖了application_controller.rb default_url_options ,以附加到每个请求a:my_flash param:

 def default_url_options { :my_flash => @my_flash } end 

然后,总是在application_controller.rb ,我写了一个my_flash_from_params before_filter来设置@my_flash变量:

 def my_flash_from_params @my_flash = params[:fb_flash] end 

最后,我在application.html.erb呈现了以下_my_flash.html.erb partial

 
<%= my_flash %>

呼叫:

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

如果您想尝试此解决方案,请参阅有关default_url_options重写的此答案 。

Flash消息构建在会话之上。 因此,如果更改会话存储以使用数据库,则仍可依赖闪存。 这可以通过编辑config/initializers/session_store.rb并按照该文件的说明轻松完成。

以下是有关该主题的更多信息: 操作控制器概述 – >会话