Это довольно странная и раздражающая проблема, которая воспроизводится с помощью сценария ниже.
- Скажем, у нас есть две страницы:
script.php
и script.php?second
.
- Страница 1 создает некоторые записи в базе данных и перенаправляет на страницу 2.
- На странице 2 пользователю предоставляется редактор для указанных записей.
Если страница 1 по какой-то причине вылетает с первой попытки и печатает какое-либо сообщение об ошибке, произойдет странная вещь. Если мы обновим страницу 1 (и на этот раз она перенаправляется нормально), каждое последующее обновление (на странице 2) фактически обновит страницу 1 и снова перенаправит на страницу 2.
В приведенном выше примере это создаст новые записи в базе данных для каждого обновления, и эту проблему я хочу обойти, перенаправив на страницу 2.
<?php
header('Content-type: text/plain');
session_start();
if (!isset($_GET['second'])) {
$_SESSION['counter'] = isset($_SESSION['counter']) ? $_SESSION['counter'] + 1 : 1;
/*$_SESSION['counter'] = 0;
exit('asd');*/
header("Location: {$_SERVER['PHP_SELF']}?second", true, 303);
exit;
}
echo "Counter: {$_SESSION['counter']}";
Чтобы попробовать приведенный выше завершенный сценарий, сначала запустите его с исправленным кодом, а затем включите закомментированный код.
Я пробовал перенаправления 301, 302 и 303. Кто-то знает , почему это происходит?