Сессия 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» в фоновом режиме?
Я очень тщательно проверил фид для любой ссылки на страницу «main» – похоже, что есть какие-то способы загрузки этой страницы.

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

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

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

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

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

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

У IE есть проблемы с cookie с его обработкой iFrames, которые могут вызвать проблему сеанса, которую вы упомянули, посмотрите на эти ссылки

http://adamyoung.net/IE-Blocking-iFrame-Cookies

http://gathadams.com/2007/06/25/how-to-set-third-party-cookies-with-iframe-facebook-applications/

http://nileshtrivedi.in/blog/2008/09/01/iframe-cookies-and-internet-explorer/

В большинстве случаев этой линии 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()); 

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

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

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

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

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

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

У меня такая же проблема, и сейчас она РЕШАЕТ.

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

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

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

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

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

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

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

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