Сессия PHP не работает с IE

У меня есть сайт с php, который использует сеансы на стороне сервера на всем сайте.
Фактически, это сайт с логином пользователя, который зависит от переменных сеанса, и если возникла проблема со всеми переменными сеанса, страницы не загружались вообще.

На сайте есть iframe, который содержит фид небольших сообщений от других пользователей.
Эти маленькие сообщения имеют рядом с ними фотографии с возможностью клика, которые открывают профиль пользователя.
Теперь каждая страница требует некоторого форматирования, чтобы открыть профиль пользователя на этой конкретной странице... там действительно только несколько проблемных страниц, но эти страницы должны иметь функции onclick, отформатированные несколько иначе, или они разбивают страницу.
Поэтому я устанавливаю переменную сеанса на каждой странице ($_SESSION["current_page"]), которая позволяет фиду знать, как отформатировать фотографии с возможностью клика. Теперь Firefox, Opera, Chrome, Safari работают так, как они должны.
Но у IE6 и IE7 возникают проблемы на страницах, для которых требуется специальное форматирование.
Поэтому, немного потянув мои волосы, я, в конце концов, начал печатать мои переменные сеанса с сервера.
И вот, на специальных страницах ($_SESSION["current_page"]) всегда задано значение "main" вместо "special1" или "special2".

Я напечатал ту же самую переменную сеанса в Firefox и обо всех других браузерах, о которых я говорил, и они печатают "special1" или "special2", как они должны. Может ли кто-нибудь подумать о чем-то, возможно, связанном с тем, что фид находится в iframe??? - что приведет к тому, что IE будет обрабатывать переменные сеанса на стороне сервера по-разному или как-нибудь запустит страницу "основной" в фоновом режиме?

Я очень тщательно проверил фид для любой ссылки на страницу "main" - похоже, нет способов загрузки этой страницы.

это не имеет смысла для меня.

Ответы

Ответ 1

Попробуйте протестировать страницу при использовании своего рода прокси-сервера мониторинга (я использую Fiddler) и посмотрю, какие страницы запрашивает браузер. Это может дать вам некоторые подсказки о том, что происходит.

Также попробуйте захватить запросы/ответы из разных браузеров и посмотреть, что делает IE по-другому (порядок запросов, содержание запросов?).

Чтобы определить проблему, можете ли вы переписать код без с помощью SESSION (он упоминается в одном из других ответов)? Возможно, IE просматривает страницы в другом порядке, чем другие браузеры? Возможно, он запрашивает основную страницу более одного раза, а это значит, что для сеанса var задано значение "main"? Без переменных сеанса страницы не будут влиять на состояние друг друга.

Ответ 2

Проверьте имя серверной машины. У IE есть проблемы с именами машин, которые содержат "-" или "_" - они не могут поддерживать сеанс! У меня была эта проблема дважды в прошлом, и мне всегда нужны годы, чтобы понять, и я в шоке, IE не исправил ее.

Просто переименуйте машину, чтобы не было странных символов! Вы можете заставить его работать, если вы просто используете IP-адрес сервера в URL-адресе для тестирования.

Ответ 4

Я думал, что некоторые люди могут найти решение этой проблемы интересной. Фиддлер, безусловно, помог здесь. Благодаря Fiddler я мог видеть, что на самом деле я попал на страницу main.php(таким образом, устанавливая переменные сеанса сеанса после установки на целевой странице), но сервер не выполнял работу после получения 302 в корне сайт. Все это происходило молча в фоновом режиме, и перед моим onload = "" javascript работал.

Итак, я был уверен, что что-то на этих страницах вызвало ошибку, но не катастрофическое.

вот он: <img src= "" >

IE расхохотался о атрибуте src и ударил корень сервера и по умолчанию на главной странице. Я не совсем понимаю, что здесь происходит. Я также не понимаю, если это так, как должен себя вести IE (это все-таки неправильный тег img) или нет. Это ошибка?

Ответ 5

В большинстве случаев этой строки php при начале файла будет достаточно:

header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

Если это не так, для IE7 вы также можете попробовать:

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

И если это не работает для IE6, вы можете использовать параметры GET для идентификатора сеанса:

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

Ответ 6

Я нашел, если вы добавили header('P3P: CP="CAO PSA OUR"'); в начало вашего документа. Кажется, что проблема была устранена.

Ответ 7

У меня была эта проблема, и это произошло из-за того, что дата на моей dev-боксе отсутствовала. Firefox не возражал, IE и хром видели, что сеанс истекает, как только он был установлен.

Ответ 8

У меня такая же проблема, и теперь она РЕШЕНА.

Значения пустых или пустых значений любых IMG-тегов вызывают проблему. Для меня я использовал JavaScript для изменения источника объекта IMG до пустого значения. Это может также сделать проблему.

Ответ 9

Если я правильно понимаю, вы пытаетесь использовать переменную сеанса для передачи данных со страницы на страницы внутри iframe на этой странице? Это не кажется хорошим способом для этого - почему бы просто не передать переменную GET в url iframe, то есть? Current_page = special1. Я бы подумал, что это будет более надежным, поскольку оно не зависит от состояния сеанса.

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

Ответ 10

Данные сеанса хранятся на стороне сервера, а не на клиенте. Я бы проверил другие страницы, где это значение будет установлено.

Ответ 11

У меня была та же проблема с ie7, и это то, что я делаю:

Если у вас есть эта проблема с использованием IIS или Apache в Windows Server, посмотрите URL-адрес, в котором вы перенаправляете его, необходимо набрать так же, как URL-адрес, где вы были до перенаправления.

Например: site.com/ pages/index.php перенаправление на site.com//index2.php собирается потерять сессию в IE7, потому что заглавная буква в Pages.

Ответ 12

Может быть, он session.cookie_lifetime. Я столкнулся с такой же проблемой. Я обновил session.cookie_lifetime: 4500 до session.cookie_lifetime:0. Это означает, что cookie сеанса никогда не истекает, пока браузер не выключится.