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

时间:2012-07-12 18:29:45

标签: ruby-on-rails facebook ruby-on-rails-3 cookieless

我正在开发一个Facebook应用程序,所以我不能依赖于P3P的(隐私首选项目),是的,这是一个该死的痛苦(见slides 18 and 19 on this slideshare about Rails and Facebook apps的图片它...)

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

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

更新

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

更新#2:

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

2 个答案:

答案 0 :(得分:3)

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

首先,我在default_url_options中覆盖application_controller.rb以附加到每个请求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 

最后,我在_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

答案 1 :(得分:0)

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

以下是有关该主题的更多信息:Action Controller Overview -> Session