[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: POST Redirect GET
braintest
Здравствуйте!

У меня есть форма, отправляется с помощью POST.
После обработки формы делается redirect на страницу, в которой указано успешно или нет прошла транзакция.
GET /form.php -> POST /process.php, Location (succ.php || fail.php) -> GET /succ.php || /fail.php

Проблема в следующем, некоторые клиенты (или браузеры) не выполняют GET, который должен быть выполнен после Location.

код выглядит примерно так
form.php:

<form method="POST" action="/process.php">
<input
type="text" name="var" value="some text" />
<input
type="submit" />
</form>


process.php:

<?php
if ($_POST['var'] == 'password') {
header('HTTP/1.1 303 See Other');
header("Location: http://myhost.org/succ.php");
} else {
header('HTTP/1.1 303 See Other');
header("Location: http://myhost.org/fail.php");
}
?>

succ.php:

All ok


fail.php:

something wrong





Спустя 39 минут, 37 секунд (18.11.2009 - 16:06) twin написал(а):
Ошибка в том, что не нужно усложнять себе жизнь. Вот ты где то начитался умных терминов, а механизма так и не понял.
Попробуй описать проблему своими словами, не умничая. И наверняка сам пойменшь гораздо больше, чем понял я из твоего вопроса.

Спустя 46 минут, 55 секунд (18.11.2009 - 16:53) braintest написал(а):
Вы предлагаете не делать редирект после обработки POST?

Спустя 7 минут, 33 секунды (18.11.2009 - 17:01) Gabriel написал(а):
<?php

header("Status: 200");
header("Location: /succ.php");
exit;

?>

а так чего некатит?

Спустя 42 минуты, 11 секунд (18.11.2009 - 17:43) braintest написал(а):
Ещё небольшое уточнение.
process.php может выполняться несколько секунд от 3 до 7.

Прокатывает и мой вариант и Ваш.

Я говорю о том случае, когда у десяти работает, а у одиннадцатого нет.

Возможен вариант, когда пользователь нажимает stop.
Я пробовал установить ignore_user_abort(true), а потом проверять connection_aborted(), но она всегда возвращает 0.

Спустя 7 минут, 35 секунд (18.11.2009 - 17:51) krasilich написал(а):
Цитата
process.php может выполняться несколько секунд от 3 до 7.


Чисто визуальное наблюдение, или замер с помощью microtime()?

Цитата
Я говорю о том случае, когда у десяти работает, а у одиннадцатого нет.


Не работает редирект? А если не отправлять код ответа вообще, а только Location?

Цитата
Проблема в следующем, некоторые клиенты (или браузеры) не выполняют GET, который должен быть выполнен после Location.


Какой еще GET, где он в том примере, что Вы привели?

Спустя 3 минуты, 13 секунд (18.11.2009 - 17:54) Gabriel написал(а):
see_man
Цитата
Не работает редирект? А если не отправлять код ответа вообще, а только Location?

ага небудем посылать статусы и запретим входы с хрома laugh.gif

Спустя 9 месяцев, 8 дней, 23 часа, 43 минуты, 6 секунд (27.08.2010 - 16:37) braintest написал(а):
Проблема найдена и решена.

Моё предположение, о том, что браузер не выполняет редирект оказалось правильным.
Вероятно, пользователь таки нажимает стоп или что-то подобное.
и пытается выбрать предыдущую страницу.

Я обработал эту ситуацию так:
Если транзакция с банком уже была, то я сразу перенаправляю его на соответствующую страницу.

За прошедшие пол-года больше проблем не возникало.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.