Подтвердить что ты не робот

Отправка файлов cookie браузера во время перенаправления 302

Есть ли проблемы с отправкой файла cookie во время перенаправления 302? Например, если я создаю файл cookie с возвратом к url ​​и перенаправляю пользователя в тот же ответ, любой (современный) браузер игнорирует cookie?

4b9b3361

Ответ 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
                }