2009-04-27 3 views
57

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

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

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

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

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

+0

IE игнорирует это, потому что его The Great IE! Этот вопрос помог мне. Благодаря! –

+4

@ Sanket: Рад, что это помогло. Хотя IE не является моим любимым браузером, в этом случае он, возможно, не ошибается здесь - другие браузеры спокойно принимают разрыв с четко определенным стандартом, тогда как IE спокойно отвергает его. Я бы сказал, что оба эти подхода могут быть сделаны лучше, но IE не является Большим Плохим Гаем здесь. – Piskvor

ответ

102

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

+20

Это самая глупая вещь в мире, но спасибо, что я собирался взорвать свой компьютер. – edhedges

+5

Просто для того, чтобы отметить: я столкнулся с этим с Internet Explorer 11, поэтому даже через много лет это все еще является актуальным ответом. – Gimby

+0

Awesome; это было именно это :) – NKCSS

49

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

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

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

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

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

+0

Можете ли вы опубликовать правило перезаписи? Похоже, что я буду делать что-то подобное на этой неделе ... – richo

+0

@Richo: Не могу опубликовать точную вещь (у меня больше нет доступа к этому коду), но попытаюсь ее воссоздать. – Piskvor

+1

Hi Piskvor, на самом деле я нашел гораздо более аккуратное решение с использованием RewriteMaps. Я сделал сценарий оболочки, который в основном просто содержит 'sed -u '/ _/-/g'', а затем создал карту с помощью команды RewriteMap sedmap prg:/path/to/script и использовал ее в моей перезаписи. – richo

12

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

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

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

Смежные вопросы