2010-05-11 69 views
0

这是一个相当奇怪和烦人的问题,与以下脚本一起转载。火狐刷新第1页,即使在重定向到第2页后

  1. 假设我们有两页:script.phpscript.php?second
  2. Page 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重定向。有人知道为什么会发生这种情况吗?

回答

-1

您正在检查get变量second是否已设置。但是你没有在你的重定向上设置它。

尝试

header("Location: {$_SERVER['PHP_SELF']}?second=1", true, 303); 
+0

正确的(然后找出那是什么,让我们知道!) - 从PHP在线手册,isset“确定是否一个变量被设置与不是NULL“,所以你需要给第二个值。 – ronaldosantana 2010-05-11 22:30:56

+1

?第二个作品,那不是问题:)第二个设置$ _GET ['second']为空字符串。 – Znarkus 2010-05-12 07:38:00

0

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,或省略该参数完全使用默认

相关问题