在canvas Facebook应用程序中,会话关联没有通过来自IFrame的HTTP请求来维护



我正在将Facebook画布应用程序从FBML迁移到基于iframe的。

用于与Facebook api通信的Facebook客户端类被放置在第一次用户访问我的应用程序的HTTP会话中。对于后续请求,我检索存储在会话中的Facebook客户端对象,并使用相同的客户端与facebook.com通信。

有两种类型的Facebook画布应用程序,即facebook.com内的应用程序:

    <
  1. FBML版本/gh><
  2. iframe版本/gh>

应用程序的FBML版本保持会话亲缘性,即应用服务器对来自同一Facebook用户的请求使用相同的会话对象。

因此,我能够检索放置在会话中的Facebook客户端并使用相同的,但在基于iframe的画布应用程序的情况下,也就是说,应用程序显示在iframe中,不使用相同的会话对象,但每次创建新会话时,因此我之前放置的Facebook客户端消失了。

不维护会话关联,并且不断创建新会话。进一步检查cookie,发现在iframe canvas应用程序的情况下,名为JSESSIONID的cookie在HttpServletRequest对象中不可用。

从Facebook应用程序到我的服务器的连续请求的cookie和会话转储:

FBML APP:
--------------------Cookies-------------------
JSESSIONID==6E8792ADDF2AF192BF71864C353DE8E5==null
----------------Session-----------------
Session ID : 6E8792ADDF2AF192BF71864C353DE8E5
Creation time : Thu Sep 08 16:36:19 IST 2011
--------------------Cookies-------------------
JSESSIONID==6E8792ADDF2AF192BF71864C353DE8E5==null
----------------Session-----------------
Session ID : 6E8792ADDF2AF192BF71864C353DE8E5
Creation time : Thu Sep 08 16:36:19 IST 2011
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IFrame App:
---------------------------------------------
--------------------Cookies-------------------
null
----------------Session-----------------
Session ID : D03845C95FC49E79EF7EED1FE8377799
Creation time : Thu Sep 08 16:39:09 IST 2011
--------------------Cookies-------------------
null
----------------Session-----------------
Session ID : 7466CDB69784FA10C570122BC866DB14
Creation time : Thu Sep 08 16:39:19 IST 2011
--------------------Cookies-------------------
null
----------------Session-----------------
Session ID : 4A23EA79AF929E6C2BD4114173AB250F
Creation time : Thu Sep 08 16:39:45 IST 2011

由于这个问题,会话关联不被维护。但我无法解释为什么会发生这种情况。我使用的是Struts 2和普通servlet。解决方案是启用iframe画布应用程序来维护会话关联,也就是说,每个请求都返回JSESSIONID cookie。我应该怎么做,或者有其他的解决方案吗?

为了将会话cookie保存在iframe中,您需要添加HTTP header P3P。我不知道确切的数值,但是在网上找到的下列方法对我很有用。

httpResponse.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");

最新更新