Internet Explorer отправляет неправильный файл cookie, когда пути перекрываются - PullRequest
12 голосов
/ 28 ноября 2011

У нас есть несколько копий веб-приложения, которое развернуто по нескольким путям в одном домене.
Пример:

Каждый экземпляр поддерживает набор файлов cookie, каждый из которых определяет свой path как "/" + .getWebDirRoot() - т.е. /abc, /xyz, /abc123

При выполнении следующего потока:

  • Войдите в систему http://mydomain.com/abc
  • Выполните некоторые действия
  • Выйдите
  • Войдите в систему http://mydomain.com/abc123
  • Выполнить некоторые действия <- Сбой </strong>

Последний шаг не удался, так как IE отправил нам неправильный файл cookie - он отправляет один для http://mydomain.com/abc вместо одного для http://mydomain.com/abc123

Этого не происходит в FireFox.(И я не пробовал другой браузер).

Это известное поведение IE (я тестировал IE9 и IE8)?
Есть ли способ преодолеть его (программным способом)?

Примечание: Просто для пояснения, этого не происходит при переключении с http://mydomain.com/abc на http://mydomain.com/xyz - поведение строго ограниченок потокам, где currentUrl.startswith(urlAssociatedWithCookie) == true

Я проверил поведение, используя Fiddler - Я ясно вижу HTTP-запрос для abc123, отправленный со значением cookie, принадлежащим abc.

Я также проверил файлы cookie в FireFox, и они, как и ожидалось, созданы по одному на каждый путь.

1 Ответ

21 голосов
/ 29 ноября 2011

После более чем одного дня изучения и поиска повсюду спецификаций поведения IE я ничего не нашел - кроме понимания, что когда IE видит cookie из домена xyz и пути abc, он отправит это при любом запросе, отправленном на любой URL, начинающийся с того же домена и пути, например `http://xyz/abc123'.

Так что в итоге я изменил создание файлов cookie вместо:

Name: mycookie
Path: /abc

Теперь я создаю следующее:

Name: mycookie
Path: /abc/

Это решило проблему без рикошетов: cookie успешно сохраняется на клиенте, а правильный cookie всегда отправляется на сервер.


Примечание: Я проверил RFC для HTTP-файлов cookie и нашел это:

Путь пути запроса соответствует заданному пути cookie, если хотя бы один из
выполняются следующие условия:

o Путь cookie и путь запроса идентичны.

o Cookie-путь - это префикс пути запроса, а последний символ пути к cookie -% x2F ("/").

o Cookie-путь - это префикс пути запроса, и первый символ пути запроса, который не включен в cookie- путь является символом% x2F ("/").

Сценарий, который должен был применяться здесь, является третьим, но похоже, что IE не соответствует RFC в этом случае ...

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