如何在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
并按照该文件的说明轻松完成。
以下是有关该主题的更多信息: 操作控制器概述 – >会话