Редирект после POST в Хроме

  • Автор темы Автор темы dlyaok
  • Дата начала Дата начала

dlyaok

Новичок
Для предотвращения повторной отправки данных после POST, как правило, используется редирект (сам на себя) вида header('Location: http://'.$_SERVER['HTTP_HOST'].'/test.php');

Совсем недавно это перестало работать в Хроме.
Что делать?
На stackoverflow советуют использовать echo "<meta http-equiv=refresh content='0;url=test.php'>";
 
Отлови событие submit джаваскриптом и задисабли кнопку. Если я правильно понял о чем речь.
 
Это что за хром, дев билд?
У меня вот хром, последний stable. если бы это сломалось, не работали бы половина сайтов.
 
Это что за хром, дев билд?
У меня вот хром, последний stable. если бы это сломалось, не работали бы половина сайтов.

Хром обычный. Что значит "не работали бы половина сайтов"? Сайты работают, но если нажать F5 после сабмита - вылетает "На странице, которую вы ищете, использовалась введенная вами информация. При возврате на эту страницу может потребоваться повторить выполненные ранее действия. Продолжить?"

Не веришь - выполни:

<?php
if (isset($_POST['a'])) {header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); exit;}
?>
<form method="post">
<input type="text" name="a">
<input type="submit">
</form>
 
А! Вот так и надо говорить, а не "перестало работать".

Нашел баг. Ну пофиксят, че.

Судя по обсуждению бага, workaround - подписывать случайный параметр в query string. Хотя я бы забил
 
Правильно советуют на stackoverflow. Ну или если хотите то же самое на PHP, то

PHP:
header('Refresh:0;url=http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);

Ну и еще action у формы всегда желательно указывать.
 
Разве что отдавать такое только для бажных версий Webkit (регекспом по user agent).
Всем подряд браузерам такое отдавать не стоит:
1) это нестандартный заголовок и не обязан поддерживаться
2) он вносит неприятную задержку даже при Refresh:0

Хотя не вижу никаких проблем с тем, чтобы забить. Редирект на самом деле делается, проблема исключительно в поведении вебкита при рефреше после редиректа.
 
Добавляйте к редиректу "?мусор", например: . "?" . time()
А вообще да, похоже на баг. Половина сайтов не сломается, ибо все же чаще всего редиректят не на тот же URL.
 
Ну вот, проблема решилась сама собой. Тем более, что в хроме автообновлялка такая, что можно считать, что обновляется у всех.
 
Ну, решилась-то она (может быть) и решилась, но осадочек остался.
багрепорт по ссылке - четырехлетней давности. а ломалось оно в предпоследнем билде.
 
То другой багрепорт, по моей ссылке правильный.
Ну то есть визуальное проявление такое же, да. Регрессия. Бывает, чо
 
Сверху