Internet Explorer игнорирует куки на некоторых доменах (не может читать или устанавливать куки)
У меня есть сайт, например example.com
где пользователи могут устанавливать свои собственные субдомены (один пользователь - один субдомен) и загружать свои собственные скрипты, например http://somedomain.example.com/xyzzy.php
будет отображаться в /www/somedomain/xyzzy.php
Теперь в некоторых из этих доменов Internet Explorer 7 не принимает / не может принимать файлы cookie. Проверено с помощью Fiddler: сервер правильно отправляет ответ Set-Cookie, но cookie никогда не появляется в IE - для JS или Developer Tools. По запросу IE7 также не отправляет заголовок Cookie.
Файлы cookie устанавливаются для домена пользователя (например, somedomain.example.com
) путь /
, пробовал разные варианты истечения (прошлые, будущие, текущие, "0"), не HttpOnly, не являются безопасными.
FF, Opera, Safari и Chrome все работают без проблем.
Почему IE игнорирует куки?
3 ответа
Один из поддоменов использует подчеркивание? IE имеет проблемы с принятием файлов cookie с поддоменов, которые не соответствуют URI RFC.
Согласно RFC1035 (доменные имена - реализация и спецификация):
[доменные имена] должны начинаться с буквы, заканчиваться буквой или цифрой и содержать в качестве внутренних символов только буквы, цифры и дефис.
Оказывается, некоторые из доменов имели подчеркивание ( "_") в них: some_domain.example.com
, Хотя это нарушение RFC, все остальные браузеры работают нормально.
MSIE 7 в домене с подчеркиванием молча удаляет все куки для этого хоста и отказывается принимать новые.
Единственное решение - использовать RFC-совместимые домены (я заменил все "_" на "-" и настроил RewriteRule, чтобы трафик перенаправлялся на совместимые домены).
Эта проблема касается не только подчеркивания в доменных именах, но и доменных имен, начинающихся с цифры. Так 1aaaaaaa.tld
на самом деле это нестандартное доменное имя, которое приведет к тому, что IE отклонит cookie.
Я решил это, используя только www2.1aaaaaaa.tld
, а затем добавив правила перезаписи для 1aaaaaaa.tld
а также www.1aaaaaaa.tld
хосты в .htaccess
, Не знаю, действительно ли это квалифицируется как совместимое со стандартами решение... но в любом случае, похоже, оно решило проблему с cookie.
Надеюсь, что это помогает кому-то!