Сеанс PHP JSONP не остается постоянным


Используя JSONP на сайте, скажем xyz.com, Я звоню на сайт abc.com/test.php . Однако каждый раз, когда я звоню на этот сайт, я получаю новый идентификатор сеанса в IE6 и IE7. В других браузерах он остается постоянным.

Кодекс test.php это что-то вроде:

<?php
session_start();
echo session_id();
?>

Однако после того, как я посещу http://abc.com/test.php в другом окне, а затем обновите мою страницу на xyz.com с помощью кода JSONP он показывает постоянный идентификатор. Я понятия не имею, почему. Есть какие-нибудь предложения?

Это происходит только в IE6 и IE7. Все остальные работают, как и ожидалось. Каким-то образом IE6 и IE7 не соединяются, чтобы сохранить идентификатор сеанса (т. Е. Имя файла cookie), пока я на самом деле не зайду на сайт в другом окне.

 2
Author: Alec Smart, 2010-01-18

1 answers

На основе некоторой информации о PHP.net, будет ли добавление этого заголовка работать?

<?php header('P3P: CP="CAO PSA OUR"'); ?>

Цитата:

"обходной путь при использовании переменных сеанса в файле.php, на который ссылается фрейм (.html или другой тип файла) на сервере, отличном от того, который обслуживает .php:

В этих условиях IE6 или более поздняя версия молча отклоняет файл cookie сеанса, который пытаются создать (неявно или явно, вызывая session_start()).

Как следствие, ваш переменная сеанса вернет пустое значение.

Согласно MS kb, обходной путь заключается в добавлении заголовка, в котором говорится, что ваша удаленная страница.php не будет злоупотреблять тем фактом, что разрешение было предоставлено.

Поместите этот заголовок в файл .php, который создаст/обновит переменные сеанса, которые вы хотите:"

Если это не решит проблему, это может быть связано с HTTReferer, поскольку IE не отправляет его по запросам, которые инициируются из JavaScript (например, делая это в IE не удастся отправить реферер HTTR document.location.href = 'http://example.com/';

 3
Author: scunliffe, 2010-01-18 14:26:42