Проблем при настройването на променливи на PHP SESSION в междудомейн iframe

Версия на Coles Notes:

index.php?map_id=foo се зарежда в iframe на www.not-my-domain.com. набори от индекси SESSION['map_id'] = foo. Flash файлът се опитва да получи 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 сесии се предават чрез бисквитки по подразбиране, но не можете да прехвърляте бисквитки между домейни. Вместо това опитайте да предадете идентификатора на сесията през url.

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

Има няколко начина, по които можете да накарате php да предаде идентификатора на сесията в URL адреса, ако това не се прави автоматично.

  1. Можете ръчно да подадете идентификатора на сесията в URL адреса (трябва да дойде преди други променливи за получаване):

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

  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");

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