Проблема установки переменных PHP SESSION в междоменном iframe - PullRequest
3 голосов
/ 30 апреля 2009

Coles Notes версия:

index.php?map_id=foo загружается в iframe на www.not-my-domain.com. наборы индексов SESSION['map_id'] = foo. Флэш-файл пытается получить SESSION['map_id'] через Authenticate.php, но для Authenticate.php не заданы значения для любых SESSION переменных.

- только первая загрузка, междоменная проблема.

Многословный:

У меня есть индекс, в котором я установил: SESSION['map_id'] = foo

Затем индексный файл загружает флэш-файл. При инициализации флэш-память получает доступ к файлу «Authenticate.php», который выводит SESSION['map_id'] и загружается во флэш-память через LoadVars. Flash затем отображает соответствующие данные. Этот шаг нельзя сделать другим способом

Все это прекрасно работает на нашем основном сайте. Проблема возникает, когда мы пытаемся портировать на другие сайты, предоставляя встраиваемые коды iframe:

<iframe src="http://www.mydomain.com/?map_id=foo&code=bar" ... ></iframe>

При новой загрузке встраиваемого кода с другого сайта (www.anotherdomain.com) кажется, что переменные SESSION уничтожены, поскольку flash просто говорит, что они пусты. ($map_id выводит пробел)

Файл индекса по-прежнему будет правильно отображать $map_id как 'foo', просто кажется, что файл 'Authenticate.php' не может получить доступ к SESSION переменным.

Я гарантировал, что session_start() присутствует во всех соответствующих файлах.

1 Ответ

4 голосов
/ 30 апреля 2009

Идентификаторы сеанса PHP по умолчанию передаются через куки, но вы не можете передавать куки между доменами. Попробуйте вместо этого передать идентификатор сессии через URL.

Вот соответствующая страница в документации php .

Есть несколько способов заставить php передавать идентификатор сессии в URL, если это не делается автоматически.

  1. Вы можете вручную передать идентификатор сеанса в URL (должен предшествовать другим переменным get):

  2. Вы можете отключить куки, заставляя каждый запрос автоматически добавлять идентификатор сессии в URL:

    ini_set ( "session.use_cookies", "0");

  3. Вы можете редактировать настройку url_rewriter.tags, которая сообщает PHP, какие html-теги следует перезаписывать с идентификатором сеанса. Здесь iframe = src был добавлен в набор по умолчанию:

    ini_set ("url_rewriter.tags", "a = href, area = href, frame = src, iframe = src, input = src, form = fakeentry");

...