Есть ли проблемы с отправкой файла cookie во время перенаправления 302? Например, если я создаю файл cookie с возвратом к url и перенаправляю пользователя в тот же ответ, любой (современный) браузер игнорирует cookie?
Отправка файлов cookie браузера во время перенаправления 302
Ответ 1
Большинство браузеров принимают куки на 302 перенаправлениях. Я был совершенно уверен в этом, но я немного поискал. Не все современные браузеры. Интернет-архив Ссылка из теперь удаленного/мертвого /microsoft connect Q/A в HTTP-стеке клиента Silverlight игнорирует Set-Cookie в ответах 302 Redirect (2010)
Я думаю, что теперь у нас есть замена для IE6 и браузеров Windows Mobile...
Ответ 2
Согласно этому сообщению в блоге: http://blog.dubbelboer.com/2012/11/25/302-cookie.html все основные браузеры, IE (6, 7, 8, 9, 10), FF (17), Safari (6.0.2), Opera (12.11) как на Windows, так и на Mac, устанавливают файлы cookie на перенаправлениях. Это верно как для 301, так и для 302 перенаправлений.
Ответ 3
Одно уведомление (чтобы сохранить жизнь разработчика):
IE и Edge игнорируют Set-Cookie в ответе на перенаправление, когда домен файла cookie является локальным.
Решение:
Используйте 127.0.0.1 вместо localhost.
Ответ 4
Здесь является ошибка Chromium для этой проблемы (Set-cookie игнорируется для ответа HTTP со статусом 302).
Ответ 5
Это действительно осуждаемый подход, но если вы действительно не хотите полагаться на 30-кратное поведение браузера set-cookie, вы можете использовать HTML meta http-equiv="refresh"
"redirect" при настройке cookie. Например, в PHP:
<?php
...
setcookie("cookie", "value", ...);
url="page.php";
?>
<html>
<head><meta http-equiv="refresh" content=1;url="<?=$url?>"></head>
<body><a href="<?=$url?>">Continue...</a></body>
</html>
Сервер отправит Set-Cookie с 200 вместо правильного 300-кратного перенаправления, поэтому браузер сохранит cookie, а затем выполнит "перенаправление". Ссылка <a>
является резервной, если браузер не выполняет мета-обновление.
Ответ 6
В моем случае я установил CookieOptions.Secure= true, но протестировал его на http://localhost. и браузер скрывает файлы cookie в соответствии с настройкой.
Чтобы избежать такой проблемы, вы можете сделать параметр cookie Secure совместимым с протоколом Request.IsHttps, например.
new CookieOptions()
{
Path = "/",
HttpOnly = true,
Secure = Request.IsHttps,
Expires = expires
}