IE - лучший браузер в мире

Проблема заключается в том что пользователь логинится на веб-форму и после нажатия на кнопку "Войти" попадает опять на ту же форму логина! Т.е. невозможно даже войти.

При этом такая проблема воспроизводилась только в IE, во всех версиях, во всех других браузерах работа была нормальной.

Проблема

После тщательного анализа выяснили, что если в названии хоста или домена есть символ подчеркивания, "_", например http: //your_host.com/Login.aspx - то IE не сохранит данные ваших сессий, любые другие переменные в куки. И это несмотря на то, что данных хост\домен добавлен в список доверенных, в IE настроена политика принимать куки с любого сайта (даже из списка запрещенных), отключена любая безопасность и т.д!!!

Выдержка с блога msdn:

Q5: IE won’t set a cookie when the hostname/domain contains an underscore?

A: Correct. Technically, underscore is not a DNS character, and while Windows will let you use an underscore when naming your machine, it warns you that doing so may cause problems. One such problem is that WinINET blocks attempts to set cookies on such domains.

Существует также множество других серьезных глюков в IE, поэтому рекомендую также ознакомиться со всей статьей, запись в официальном блоге Microsoft:
http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx

Решение

Если у вас такая проблема - не используйте IE - наверно лучшее решение :).

Ну а если серьезно, варианты решений:

  1. Переименовать имя сервера на имя не содержащее символы подчеркивания
  2. Настроить DNS переадресацию, например:
    • a. На каждом клиентском компьютере добавить в файл hosts запись вида: ip-адрес_серверапробел>имя_сервера (пример: 10.5.6.6 WebForm) – после этого обращаться к веб-форме можно будет с помощью адреса http://WebForm/Login.aspx - при этом имя домена уже не будет содержать символ подчеркивания и все будет отлично работать.
    • b. Если в локальной сети используется DNS-маршрутизация, есть DNS-сервер, то необходимо сделать для web-сервера синоним, не содержащий подчеркивания. Сделать это нужно в одном месте (не на каждом клиентском компьютере), поэтому это решение правильнее. После этого нужно перезагрузить DNS и обращаться к веб-форме используя синоним. Это должен делать администратор сети.

Приятной разработки :)

Нравится

Поделиться

3 комментария

Да. IE - это зло. С выходом новых версий ничего не меняется, если кто-то хочет понять причины: http://paulirish.com/2011/browser-market-pollution-iex-is-the-new-ie6/

IE всё правильно делает:


The LDH rule, as updated, provides that the labels (words or strings
separated by periods) that make up a domain name must consist of only
the ASCII [ASCII] alphabetic and numeric characters, plus the hyphen.
No other symbols or punctuation characters are permitted, nor is
blank space.

RFC 3696

"Зверев Александр" написал:IE всё правильно делает:

В этом случае, частично согласен, НО!

1. IIS мог бы как-то сказать видя, что хост называется не по правилам FQDN, а он принимает все как есть и в итоге IE не работает
2. Если есть настройки - от кого принимать куки, то должна быть настройка - "принимать куки даже если в имени есть подчеркивание" или хотя бы что-то в документации к IE или какая-то возможность это отключить и т.д. С точки зрения пользователя - вы разрешили для всех сайтов использовать куки. Но для некоторых они все же не используются. Почему??

Показать все комментарии