3

我正在开发一个 facebook 应用程序,所以由于 P3P(隐私偏好项目),我不能依赖 cookie,是的,这是一个该死的痛苦(有​​关 Rails 和 Facebook 应用程序的图片,请参见幻灯片上的幻灯片 18 和 19) ...

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

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

更新:

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

更新#2:

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

4

2 回答 2

3

我终于找到了一种解决方法来实现我自己的(简单)闪存消息并将它们通过参数从一个请求传递到另一个请求。

首先,我覆盖default_url_optionsapplication_controller.rb每个请求附加一个 :my_flash 参数:

def default_url_options 
  { :my_flash => @my_flash }
end    

然后,总是在 中application_controller.rb,我写了一个my_flash_from_paramsbefore_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 %>

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

于 2012-07-13T16:33:41.830 回答
0

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

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

于 2012-07-12T18:47:57.647 回答