Перенаправление PHP в IE при использовании переменных сеанса - PullRequest
0 голосов
/ 04 января 2010

У меня есть небольшой сайт, который работает как показано ниже

  1. Пользователь заходит на страницу входа и вводит учетные данные (назовите это page1)
  2. Форма публикуется на странице 2, которая аутентифицирует пользователя, вызывает session_start, а затем устанавливает переменную сеанса с помощью $_SESSION['somevar'] и перенаправляет на страницу 3
  3. На странице 3 я проверяю, установлен ли $_SESSION['somevar'], если не отправляю пользователя обратно на страницу входа

Код:

//here's the code on the top of the page3 
<?php
    session_start();
    if (!isset($_SESSION['somevar'])) 
    { 
        header("Location:http://somesite") 
    }
    ...other code follows

Проблема в том, что это работает в FireFox, даже с правильными учетными данными пользователя. IE 7 продолжает перенаправлять обратно на страницу 1 вместо отображения содержимого страницы 3.

Какой-нибудь указатель, пожалуйста, чтобы решить это?

РЕДАКТИРОВАТЬ: очень странное решение, но оно работает. Я изменил

 if (!isset($_SESSION['somevar'])) { header("Location:http://somesite") }

до

 if ($_SESSION['somevar'] == '' ) { header("Location:http://somesite") }

и IE теперь счастлив. Но я все еще не понимаю, почему isset не работает в IE

Большое спасибо

Ответы [ 4 ]

0 голосов
/ 02 июня 2010
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

 header("Set-Cookie: SIDNAME=ronty; path=/; secure");

 header('Cache-Control: no-cache');

 header('Pragma: no-cache');

используйте это в верхней части страницы, чтобы исправить IE7

header('location: land_for_sale.php?phpSESSID='.session_id());

используйте ?phpSESSID='.session_id() для вашего местоположения: для фиксированной IE6

0 голосов
/ 04 января 2010

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

Вы можете проверить, что на самом деле находится в сеансе, просто var_dumping его содержимое. Перенаправление не будет учтено во время теста, поскольку вывод передается в браузер до вызова header ().

<?php
  session_start();

  /* To test: */
  var_dump($_SESSION);

  if (!isset($_SESSION['somevar'])) 
  { 
      header("Location: http://somesite");
      die();
  }
0 голосов
/ 11 января 2010

Используйте iehttpheasers или wireshark, чтобы узнать, отправляет ли IE cookie-файл обратно. Я ожидаю, что вы обнаружите, что либо это не так, либо кеширование страниц не должно.

С

0 голосов
/ 04 января 2010

Ваш скрипт должен выйти () или умереть () после вызова функции заголовка.

header () не заканчивает скрипт. Некоторые браузеры перейдут на новое место, а другие будут ждать, пока запустится оставшаяся часть сценария, и отобразить этот вывод. Если вы не вызовете exit (), скрипт будет работать независимо от того, отображается вывод или нет.

...