У меня есть веб-приложение, развернутое в WebSphere в корне контекста /app
.Внутри приложения есть javascript, который выполняется сразу после загрузки, и выглядит примерно так:
document.cookie = "foo=bar; path=/app";
setTimeout(function () {
document.cookie = "baz=qux; path=/app";
}, 1000);
Поведение Chrome
Из DevTools я вижу, что изначально foo=bar
созданокак non -httpOnly и через 1-2 секунды он автоматически становится httpOnly.После ожидания в течение примерно 5 секунд (просто чтобы убедиться) также создается второй файл cookie, но в режиме, отличном от httpOnly, конечный результат выглядит следующим образом:
foo=bar (httpOnly=true)
baz=qux (httpOnly=false)
Q1: почемуfoo = bar становится httpOnly через некоторое время?
Q2: Почему это задержанное создание файлов cookie имеет такую разницу?
Я могу сказать, что порог равенгде-то 700-800 мс, если я задерживаю создание куки с меньшим, чем это значение, оно ведет себя точно так же, как и вообще без задержки.
Поведение Firefox
Здесь в случае задержки ниже порога (илибез какого-либо setTimeout) он создает 2 куки-файла на кей, пару значений, например:
foo=bar; path=/app (httpOnly=false)
foo=bar; path=/app/ (httpOnly=true)
baz=qux; path=/app (httpOnly=false)
baz=qux; path=/app/ (httpOnly=true)
, в то время как в случае задержки выше порогового значения он не создает дублирующийся куки-файл (для baz = qux):
foo=bar; path=/app (httpOnly=false)
foo=bar; path=/app/ (httpOnly=true)
baz=qux; path=/app (httpOnly=false)
В3: Не говоря уже о том, почему FF добавляет косую черту в конце (я слышал, что разные браузеры по-разному обрабатывают файлы cookie), почему это не относится к отложенному созданию файлов cookie?
Я даже подумал, что может бытьГде-то в приложении есть сценарий, который через некоторое время «перезаписывает» не только HTTP-файлы cookie на httpOnly, но я не думаю, что это так, потому что выполнение этого из консоли ничего не меняет:
document.cookie="baz=qux; path=/app; HttpOnly"
т.е. baz = qux остается не только httpOnly.Некоторые даже утверждают, что это невозможно
Это не то, что сервер сбрасывает куки в httpOnly через ответы, я проверял каждый запрос в представлении сети, и эти куки не приходятс сервера.
У меня есть ощущение, что в этой среде что-то должно быть, потому что я попытался создать отдельный загрузочный проект Spring с аналогичной настройкой, и все файлы cookie не были включены только в http.
Есть идеи?К сожалению, я не могу поделиться реальным кодом.Если кто-то сможет хотя бы теоретически объяснить, в чем может быть причина, это будет очень полезно.
Другие примечания:
- Это не относится к файлам cookieсоздан с путем = /
- Chrome версия: 75.0.3770.100
- Версия Firefox: 67.0.4
- Я использую окно инкогнито без каких-либо расширений