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

dlyaok

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

Совсем недавно это перестало работать в Хроме.
Что делать?
На stackoverflow советуют использовать echo "<meta http-equiv=refresh content='0;url=test.php'>";
 

Zvook

Новичок
Отлови событие submit джаваскриптом и задисабли кнопку. Если я правильно понял о чем речь.
 

fixxxer

К.О.
Партнер клуба
Это что за хром, дев билд?
У меня вот хром, последний stable. если бы это сломалось, не работали бы половина сайтов.
 

dlyaok

Новичок
Это что за хром, дев билд?
У меня вот хром, последний 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>
 

fixxxer

К.О.
Партнер клуба
А! Вот так и надо говорить, а не "перестало работать".

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

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

radioheaded

PHP нуб
Правильно советуют на stackoverflow. Ну или если хотите то же самое на PHP, то

PHP:
header('Refresh:0;url=http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
Ну и еще action у формы всегда желательно указывать.
 

fixxxer

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

Хотя не вижу никаких проблем с тем, чтобы забить. Редирект на самом деле делается, проблема исключительно в поведении вебкита при рефреше после редиректа.
 

MiksIr

miksir@home:~$
Добавляйте к редиректу "?мусор", например: . "?" . time()
А вообще да, похоже на баг. Половина сайтов не сломается, ибо все же чаще всего редиректят не на тот же URL.
 

fixxxer

К.О.
Партнер клуба
Ну вот, проблема решилась сама собой. Тем более, что в хроме автообновлялка такая, что можно считать, что обновляется у всех.
 

Фанат

oncle terrible
Команда форума
Ну, решилась-то она (может быть) и решилась, но осадочек остался.
багрепорт по ссылке - четырехлетней давности. а ломалось оно в предпоследнем билде.
 

fixxxer

К.О.
Партнер клуба
То другой багрепорт, по моей ссылке правильный.
Ну то есть визуальное проявление такое же, да. Регрессия. Бывает, чо
 
Сверху