Сходство сессий не поддерживается HTTP-запросами от IFrame в холстом приложении Facebook - PullRequest
0 голосов
/ 08 сентября 2011

Я перевожу приложение Canvas Facebook из FBML на iframe.

Класс клиента Facebook, который используется для связи с API Facebook, помещается в сеанс HTTP при первом обращении пользователя к моему приложению.Для последующих запросов я извлекаю клиентский объект Facebook, сохраненный в сеансе, и связываюсь с facebook.com с тем же клиентом.

Существует два типа приложений на холсте Facebook, то есть приложения в facebook.com:

  1. версия FBML
  2. версия iframe

Версия приложения FBML поддерживает соответствие сеанса, то есть тот же объект сеанса используется приложениемсервер для запросов от того же пользователя Facebook.

Следовательно, я могу извлечь клиент Facebook, помещенный в сеанс, и использовать его, но в случае приложения холста на основе iframe, то есть приложение отображаетсявнутри iframe один и тот же объект сеанса не используется, но каждый раз, когда создается новый сеанс, и, следовательно, клиент Facebook, который я разместил ранее, пропадает.

Сходство сеанса не поддерживается, и новые сеансы продолжают создаваться.При дальнейшей проверке файлов cookie обнаруживается, что файл cookie с именем JSESSIONID недоступен в объекте HttpServletRequest в случае приложения iframe canvas.

Дамп файлов cookie и сеанс, принятый для последовательных запросов из приложения Facebook на мой сервер:

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 и простые сервлеты.Решение состоит в том, чтобы позволить приложению iframe canvas поддерживать сходство сессий, то есть возвращать cookie-файл JSESSIONID при каждом запросе.Что мне делать или есть альтернативные решения?

1 Ответ

0 голосов
/ 26 сентября 2011

Для сохранения cookie сессии в iframe необходимо добавить заголовок HTTP P3P.Я не знаю точного значения, но у меня сработало следующее найденное в интернете.

httpResponse.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...