Internet Explorer игнорирует файлы cookie на некоторых доменах (не может читать или устанавливать файлы cookie)

У меня есть сайт, например. example.com, где пользователи могут устанавливать свои собственные поддомены (один пользователь - один поддомен) и загружать свои собственные скрипты, например. http://somedomain.example.com/xyzzy.php будет отображаться на /www/somedomain/xyzzy.php

Теперь, в некоторых из этих доменов, Internet Explorer 7 не будет/не может принимать файлы cookie. Проверено с помощью Fiddler: сервер отправляет ответ Set-Cookie правильно, но cookie никогда не появляется в IE - для JS или инструментов разработчика. По запросу IE7 также не отправляет заголовок Cookie.

Файлы cookie настроены для домена пользователя (например, somedomain.example.com), путь /, попробовали разные варианты истечения срока действия (прошлое, будущее, текущее, "0" ), не являются HttpOnly, не являются безопасными.

FF, Opera, Safari и Chrome работают без проблем.

Почему IE игнорирует файлы cookie?

Ответ 1

Использует ли один из поддоменов символ подчеркивания? IE имеет проблемы с принятием файлов cookie из поддоменов, которые не следуют URI RFC.

Ответ 2

Согласно RFC1035 (Доменные имена - реализация и спецификация):

[доменные имена] должны начинаться с буквы, заканчиваться буквой или цифрой и иметь в качестве внутренних символов только буквы, цифры и дефис.

Оказывается, некоторые из доменов имеют в них символ подчеркивания ( "_" ): some_domain.example.com. Хотя это является нарушением RFC, все остальные браузеры работают нормально.

MSIE 7, в домене с подчеркиванием, молча удаляет все файлы cookie для этого хоста и отказывается принимать новые.

Единственное решение - использовать RFC-совместимые домены (я заменил все "_" на "-" s и настроил RewriteRule, чтобы трафик перенаправлялся на совместимые домены).

Ответ 3

Проблема не только применяется для подчеркивания имен доменов, но и для доменных имен, начинающихся с числовой цифры. Таким образом, 1aaaaaaa.tld на самом деле является нестандартным доменным именем, что приведет к тому, что IE отклонит файл cookie.

Я решил это, используя только www2.1aaaaaaa.tld, а затем добавив правила перезаписи для хостов 1aaaaaaa.tld и www.1aaaaaaa.tld в .htaccess. Не знаю, действительно ли это относится к стандартизованному решению.... но в любом случае, похоже, он решил проблему с файлом cookie.

Надеюсь, что это поможет кому-то!