Firefox обновляет страницу 1 даже после перенаправления на страницу 2 - PullRequest
0 голосов
/ 11 мая 2010

Это довольно странная и раздражающая проблема, которая воспроизводится с помощью сценария ниже.

  1. Скажем, у нас есть две страницы: script.php и script.php?second.
  2. Страница 1 создает некоторые записи в базе данных и перенаправляет на страницу 2.
  3. На странице 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. Кто-то знает , почему это происходит?

Ответы [ 2 ]

0 голосов
/ 20 мая 2011

С RFC 2616 :

   10.3  Redirection 3xx .............................................61
   10.3.1   300 Multiple Choices .....................................61
   10.3.2   301 Moved Permanently ....................................62
   10.3.3   302 Found ................................................62
   10.3.4   303 See Other ............................................63
   10.3.5   304 Not Modified .........................................63
   10.3.6   305 Use Proxy ............................................64
   10.3.7   306 (Unused) .............................................64
   10.3.8   307 Temporary Redirect ...................................65

Я думаю, вы видите кеширование перенаправления в вашем браузере, потому что вы используете "постоянные" перенаправления.

Попробуйте использовать код состояния 307 или полностью пропустите этот параметр, чтобы использовать значение по умолчанию (затем выясните, что это такое, и дайте нам знать!)

0 голосов
/ 12 мая 2010

Вы проверяете, установлена ​​ли переменная get секунда. Тем не менее, вы не установили его на своем перенаправлении.

Попробуйте

header("Location: {$_SERVER['PHP_SELF']}?second=1", true, 303);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...