Мое веб-приложение сделано так, что когда пользователь входит на сервер, добавляется заголовок Set-Cookie в ответ, например:
Set-Cookie:JSESSIONID=1; Path=/myApp/; Secure
При выходе из системы я пытаюсь удалить этот файл cookie на клиенте (браузере), так как мне все равно, был ли сеанс успешно уничтожен на сервере, если файл cookie удален. Любые затянувшиеся «призрачные» сеансы будут время от времени очищаться на сервере.
Однако мое приложение не может удалить файл cookie JSESSIONID. Скажем, функция выхода из системы была вызвана из https://test.myserver.com/myApp/app/index.html#/mySubPage
, и функция выхода из системы делает следующее:
delete $cookies["JSESSIONID"];
$location.path("/login");
Файл cookie не удаляется. Обновление списка файлов cookie на вкладке «Ресурсы» в инструментах разработчика Chrome показывает, что он все еще там. При перезагрузке страницы входа и обновлении списка файлов cookie на вкладке «Ресурсы» файл cookie по-прежнему отображается.
Почему я не могу удалить файл cookie из моего клиента Javascript, если он не является файлом cookie HTTPOnly? Это путь, который вызывает проблемы? Не должно быть, поскольку скрипт выполняется на странице, включенной в путь файла cookie. С файлами cookie на самом деле не так сложно иметь дело, поэтому я прекрасно понимаю, что здесь может быть что-то тривиальное, что я упускаю из виду, но любая помощь будет очень признательна.
ОБНОВЛЕНИЕ:
Я указал неправильный путь к моему приложению в своем исходном сообщении. Теперь он отредактирован, чтобы отразить правильный путь (ну, абстрактно). Оказывается, это была критическая информация для вопроса. AngularJS использует полный относительный путь приложения в качестве атрибута пути всех файлов cookie, которые он создает/удаляет, поэтому, поскольку наш сервер установил для файла cookie путь /myApp/
, а приложение работало по относительному пути /myApp/app
, Angular пытался удалить прежний файл cookie, которого не существует (чтобы перезаписать или удалить существующий файл cookie, имя, домен и путь должны быть идентичны тем, которые использовались при создании файла cookie).
delete $cookies[key];
, разницы не будет. - person Joe Dyndale   schedule 07.01.2013