Проблема с настройкой переменных PHP SESSION в междоменном iframe

Версия примечаний Коулза:

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() присутствует во всех соответствующих файлах.


person sean.hudson    schedule 30.04.2009    source источник


Ответы (1)


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

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

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

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

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

  2. Вы можете отключить файлы cookie, заставив каждый запрос автоматически добавлять идентификатор сеанса к 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");

person vamin    schedule 30.04.2009
comment
Итак, поскольку идентификатор сеанса не передается в первый раз через файлы cookie, переменные сеанса не знают, к какому сеансу они принадлежат? Если я передам идентификатор сеанса через URL-адрес, я смогу сообщить сеансу его идентификатор? - person sean.hudson; 30.04.2009
comment
В этом суть. Я обновил свой ответ, чтобы было немного понятнее, как это сделать. - person vamin; 01.05.2009
comment
Это довольно деликатное решение, потому что мы открываем его для общественности. Скорее всего, он будет вставлен на чью-то страницу с помощью редактора типа blogspot. Можно ли это сделать только с нашими страницами? - person sean.hudson; 01.05.2009
comment
Я не уверен. PHP автоматически добавляет идентификатор сеанса к URL-адресу, если у клиента отключены файлы cookie. Возможно, вы могли бы попробовать заставить это поведение со своей стороны, установив ini_set(session.use_cookies,0); на вашем конце. Я не уверен, что это сработает, но если это сработает, отправьте ответ, и я отредактирую свой ответ, чтобы включить это решение. - person vamin; 01.05.2009
comment
Это отлично работает для ссылок. Но как насчет вызовов JS AJAX? Как легко с ними справиться? - person yarek; 11.11.2020