Сессионные куки и IE 8 - PullRequest
8 голосов
/ 26 марта 2010

Я недавно создал простое веб-приложение, развернутое через Tomcat. В приложении используется довольно стандартная система безопасности, основанная на сеансах, когда пользователь, вошедший в систему, получает сеанс.

Сеансы отлично работают в Firefox и Chrome, но требуют использования jsessionid в URL для IE (проверено 7 и 8), для которого задана средняя конфиденциальность. В IE 8 я пытался переопределить обработку файлов cookie, установив «Разрешить все сторонние файлы cookie» и «Разрешить все файлы cookie сеанса» - без кубиков. Тем не менее, когда я запускаю Tomcat на своем локальном компьютере, IE принимает cookie, и сеансы работают очень хорошо.

А теперь, для заголовков HTTP.

Из Chrome зарегистрированный пользователь получает сеанс

GET http://devl:8080/testing/ HTTP/1.1
Host: devl:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1036 Safari/532.5
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
P3P: CP="NON CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT STA"
Set-Cookie: JSESSIONID=9280023BCE2046F32B13C89130CBC397; Path=/testing
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Content-Length: 2450
Date: Fri, 26 Mar 2010 14:14:40 GMT

GET http://devl:8080/testing/logout HTTP/1.1
Host: devl:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1036 Safari/532.5
Referer: http://devl:8080/testing/
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=9280023BCE2046F32B13C89130CBC397

...

Из IE 8, со стандартным средним уровнем безопасности и конфиденциальности-

GET http://devl:8080/testing/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; Tablet PC 2.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: devl:8080
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
P3P: CP="NON CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT STA"
Set-Cookie: JSESSIONID=192999F922D6E9C868314452726764BA; Path=/testing
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Content-Length: 2450
Date: Fri, 26 Mar 2010 14:32:34 GMT

GET http://devl:8080/testing/logout HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://devl:8080/testing/;jsessionid=6371A83EFE39A46997544F9146AA5CEA
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; Tablet PC 2.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: devl:8080

...

Я думал, что это может быть P3P, но при добавлении компактной политики ничего не меняется. Это стандартная сессия Tomcat, поэтому я очень удивлен, что до сих пор не смог найти других людей с такой же проблемой. У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ 03.04.2010 -

Извините, если я не прояснил это - я пытался из нескольких других случаев IE - коллег по коридору и т. Д.

РЕДАКТИРОВАТЬ 03.04.2010 -

Я также пытался включить подсказку для всех файлов cookie, но не получил подсказку. Установка домена в заголовке «Set-Cookie» с помощью Fiddler также не имеет значения.

Ответы [ 10 ]

9 голосов
/ 06 августа 2010

Я столкнулся с этой проблемой, немного покопался и обнаружил:

http://forums.iis.net/p/1147938/1879164.aspx

, в котором говорится, что доменные имена с подчеркиванием вызывают проблемы с Windows Server, tomcat и IE

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

5 голосов
/ 10 августа 2010

Проблема: IE8 отказывался принимать файлы cookie на сайте, который я создал, но Firefox и IE7 работали очень хорошо и делали это очень долго - это был стабильный код.

Решение (для меня): Мой сервер находится в другом часовом поясе с клиентским компьютером. Глупый, IDIOTIC IE8 пытается быть умным и отказывается принимать куки (хранящиеся на локальном клиентском компьютере) с 20-минутным сроком службы. Мой PHP-код был прямо из учебника, таким образом:

setcookie($name,$value,time()+1200);

Но он работает нормально, если я изменяю его, например -

setcookie($name,$value,time()+120000);

Это все еще оставляет мне проблему с тем, что cookie-файл умирает через 20 минут, но по крайней мере мои пользователи теперь могут использовать мой веб-сайт с IE8. Я передаю эту информацию на случай, если она может кому-то помочь.

1 голос
/ 02 апреля 2010

Я согласен с Lexicore - протокол cookie с веб-сервера выглядит правильно, поэтому с IE что-то есть. Было бы проще выяснить, как решить проблему, если бы мы лучше поняли, почему IE отклоняет cookie. В качестве альтернативы попросите друга открыть для вас сайт в IE, чтобы подтвердить, что проблема с сервером, а не с экземпляром браузера.

Вот некоторые вещи, которые нужно проверить, чтобы помочь отладке с IE и куки - к сожалению, есть куча вариантов, чтобы проверить. Извините, если некоторые из этих предметов кажутся базовыми - я просто не хочу делать какие-либо предположения. Я следую в IE 8.0 для этого.

Сначала перейдите на целевой сайт (http://devl:8080/testing/) в IE. Затем:

  1. Подтвердите, какую зону IE классифицирует 'http://devl:8080/testing/'. (Это может объяснить, почему он работает с Tomcat на вашем локальном компьютере.) Зона отображается в нижней панели браузера и, скорее всего, говорит " Интернет». Если вместо этого в нем указано «Локальная интрасеть», «Надежный сайт» или «Ограниченный сайт», это может быть частью проблемы, и вам следует обновить свой вопрос или выяснить, почему он не классифицирован как Интернет.

  2. Дважды щелкните индикатор зоны в нижней панели (предположительно «Интернет»), чтобы открыть диалоговое окно «Безопасность». Уровень безопасности для Интернета установлен на средний-высокий? Если это не так, это может быть частью проблемы, и вам, вероятно, следует сбросить ее обратно, чтобы соответствовать вашим пользователям.

  3. Выберите зону «Интернет», а затем нажмите кнопку «Пользовательский уровень ...», чтобы открыть диалоговое окно «Параметры безопасности». Убедитесь, что для параметра «Постоянство пользовательских данных» установлено значение «Включить». Параметр «Постоянство пользовательских данных» находится в нижней части 1/4 списка параметров в разделе «Разное» (в нижней части раздела чуть выше следующего раздела «Сценарии»).

  4. Нажмите OK в каждом диалоговом окне, чтобы закрыть их оба.

  5. В строке меню (включите ее, если она не включена), нажмите «Инструменты»> «Свойства обозревателя». Выберите вкладку «Конфиденциальность». Я знаю, что вы упомянули, что вы пробовали кое-что здесь, но эти изменения могут не повлиять на ваш сайт, если ваш сайт не находится в зоне Интернета или если ваш сайт находится в списке исключений "Действия по защите сайта", поэтому лучше просто подтвердить.

  6. Установлен ли параметр конфиденциальности на вкладке "Конфиденциальность" на Средний? Если нет, вы можете сбросить настройки по умолчанию.

  7. Нажмите кнопку «Сайты», чтобы открыть диалоговое окно «Действия по обеспечению конфиденциальности для каждого сайта». Ваш сайт dev1 указан в списке? Если так, удалите это. Нажмите кнопку ОК, чтобы закрыть диалоговое окно. Кроме того, вы можете заставить свой сайт dev1 всегда разрешать файлы cookie.

  8. Нажмите кнопку «Дополнительно». Проверена ли опция «Переопределять автоматическую обработку файлов cookie?». Если это так, вы можете отменить ее, чтобы она соответствовала вашим пользователям. В качестве альтернативы попробуйте проверить ее и установить «Всегда разрешать сеансовые файлы cookie».

  9. Нажмите OK в каждом диалоговом окне, чтобы закрыть их оба.

  10. Убедитесь, что браузер все еще находится на целевом сайте ('http://devl:8080/testing/'). Нажмите «Просмотр»> «Политика конфиденциальности веб-страницы ...», чтобы открыть диалоговое окно «Отчет о конфиденциальности». Включает ли этот список «») http://dev1:8080/testing/"? Указывает ли столбец Cookie «Принят» для «http://dev1:8080/testing/"?

  11. Выберите «http://dev1:8080/testing/" из списка. Нажмите« Сводка », чтобы просмотреть Политику конфиденциальности. Если она установлена ​​для вашего сайта, вы должны увидеть ее здесь. В противном случае вы должны получить сообщение о конфиденциальности политика не найдена. Посмотрите в нижней части диалогового окна, чтобы увидеть, как сайт настроен на использование файлов cookie (сравнивать, всегда разрешать или никогда не разрешать).

Надеюсь, это поможет или даст вам некоторые идеи для продолжения.


Ref:

1 голос
/ 02 апреля 2010

Этот форум, касающийся P3P, представляется актуальным.

Также вы рассматривали вопрос об установке своего домена и даты истечения срока действия для cookie сеанса?

1 голос
/ 02 апреля 2010

Попробуйте использовать стандартный порт HTTP (80). Я неоднократно читал о проблемах с номерами портов в URL-адресах, касающихся конфиденциальности / безопасности в IE, но в настоящее время не могу найти соответствующие ссылки.

1 голос
/ 31 марта 2010

Проверено ли у вас правильное время на сервере?

У меня недавно были похожие проблемы с тем, что IE не принимает файлы cookie должным образом.После большого количества царапин на голове это оказалось из-за того, что разница во времени между сервером и клиентскими компьютерами была настолько большой, что IE отказался принимать cookie.Однако это было в Apache.

0 голосов
/ 03 апреля 2010

Из того, что вы говорите, видно, что вы видели эту проблему только в IE и использовали только компьютеры в своем офисе. Существует ли какой-либо «пакет безопасности», установленный ИТ-отделом на всех офисных компьютерах, и если да, можете ли вы временно отключить его? Часто эти типы приложений подключаются к IE и отбрасывают его стеком HTTP. Если у вас установлено подобное программное обеспечение, есть ли у вас «чистый» инсталляционный компьютер или компьютер стороннего производителя, с которым вы можете тестировать?

0 голосов
/ 02 апреля 2010

Я бы попытался использовать полное имя хоста сервера. MSIE обрабатывает имя хоста без доменов как находящееся в «локальной интрасети» и по-разному обрабатывает безопасность.

В частности, вместо:

http://devl:8080/testing/

Попробуйте использовать что-то вроде:

http://devl.mydomain.com:8080/testing/
0 голосов
/ 02 апреля 2010

В какую зону безопасности входит сайт dev1? IE обрабатывает файлы cookie и многие другие средства безопасности по-разному, в зависимости от того, какая зона (и как зона настроена).

Попробуйте настроить сайт dev1, чтобы он явно был частью надежных сайтов, например, и посмотрите, что произойдет.

Зона:

Internet
Local Intranet
Trusted Sites
Restricted Sites

Кроме того, файлы cookie должны быть ограничены путем / testing? Попробуйте установить его для / и посмотрите, будет ли это иметь значение.

0 голосов
/ 29 марта 2010

Это явно не имеет никакого отношения к Tomcat, так как cookie устанавливается - просто не принимается IE. Это должно быть проблемой безопасности в IE. Может быть эта статья MS поможет ее настроить.

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