PHP сессия не работает с IE - PullRequest
       30

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

14 голосов
/ 20 ноября 2008

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

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

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

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

Ответы [ 12 ]

31 голосов
/ 20 ноября 2008

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

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

10 голосов
/ 20 ноября 2008

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/

9 голосов
/ 20 ноября 2008

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

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

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

3 голосов
/ 02 июня 2010

В большинстве случаев этой строки 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());
3 голосов
/ 22 ноября 2008

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

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

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

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

2 голосов
/ 01 ноября 2010

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

1 голос
/ 29 января 2011

У меня та же проблема, и теперь она решена.

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

1 голос
/ 28 июня 2010

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

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

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

0 голосов
/ 14 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...