IE не передает переменные сессии PHP - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь использовать переменные сеанса на нескольких страницах. Однако переменные исчезают, когда я перехожу с исходной страницы, на которой они установлены, на другую страницу моего сервера. Я подтвердил, что переменные изначально установлены на первой странице, но когда я пытаюсь получить доступ к ним на следующей странице, они не имеют значения. Если я получаю доступ к session_id(), он отличается от того, который я установил на первой странице.

Вот упрощенная версия того, что я пытаюсь сделать: (Первая страница, где установлены переменные сеанса)

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL); 
session_start();
$_SESSION['id'] = session_id();
header('Location: pagetwo.php');
die();
?>

(Вторая страница, где я пытаюсь получить доступ к переменным сеанса)

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL); 
session_start();
echo "SESSION[id] = ".$_SESSION['id']."<br>";
?>

$_SESSION['id'] возвращает пустое значение, и у меня выводится сообщение об ошибке:

Примечание: неопределенный индекс: id в C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ htdocs \ pagetwo.php в строке 5

Теперь здесь все становится немного странно. Это не происходит во всех браузерах (только IE8 и Firefox 3). Я могу получить доступ к переменным сеанса в Chrome 15 и Firefox 7. Кроме того, у меня есть два разных сервера под управлением Apache и PHP. Сервер, на котором у меня возникают эти проблемы, работает под управлением PHP 5.2.17, однако на моем другом сервере под управлением PHP 5.2.9 я могу получить доступ к переменным сеанса на всех страницах во всех типах браузеров.

Может показаться, что файлы PHP.ini будут разными на двух серверах, однако настройки сеансов у них идентичны.

Я не уверен, что кто-то еще сталкивался с подобной проблемой, когда IE8 не мог получить доступ к переменным сеанса в PHP 5.2.17, но я искал формы в течение последних двух дней и не мог найти ничего подобного. Я надеюсь, что просто упускаю что-то очень простое, и кто-то может указать мне правильное направление.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2011

У меня была такая же проблема при разработке приложений для Facebook - IE не отправлял cookie сессии, поэтому каждый запрос страницы начинался с нового.Следующий заголовок решил это для меня:

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
3 голосов
/ 10 ноября 2011

Я подозреваю, что это так, потому что вы не закрываете переменную сеанса, прежде чем перенаправить своего пользователя на pagetwo.php . Я бы рекомендовал добавить session_write_close() после установки значения ID в вашем коде. Это гарантирует, что изменение будет добавлено в переменную сеанса и доступно для поиска на более поздней странице.

<?php 
session_start();
$_SESSION['id'] = session_id();
session_write_close();
header('Location: pagetwo.php'); 
?>

Вы можете узнать больше о session_write_close() на PHP.net , и если вы прокрутите вниз до комментариев, добавленных пользователем, вы увидите комментарий человека по имени JP по этой самой проблеме.

Ура! * * 1013

...