使用 php header("Refresh") 重定向时的延迟 [重复]

Posted

技术标签:

【中文标题】使用 php header("Refresh") 重定向时的延迟 [重复]【英文标题】:delay when redirecting with php header("Refresh") [duplicate] 【发布时间】:2012-12-20 17:24:49 【问题描述】:

可能重复:Why I have to call ‘exit’ after redirection through header(‘Location..’) in php?

为了在不登录的情况下无法访问mainpage.php,我使用以下代码启动mainpage.php:

<?php
    session_start();
    if(!isset($_SESSION['name']))
        header("Refresh: 0; url=hauptseite_slim.php");
    
?>
<!DOCTYPE html>
...

这正是我想要的,但是,问题是,它非常丑陋,因为有一会儿,主页出现了。我怎样才能避免这种影响?

【问题讨论】:

通过不输出页面。通常建议使用exit(header(..));Location: 可能是更好的选择。 只是一个注意......这个: if(!isset($_SESSION['name'])) 不应该用于检查用户是否登录。会话可能很容易劫持。每次页面加载时都应重新验证用户。 ebay、facebook 和 google 等网站如何让用户保持登录状态? 通过在每次页面加载时重新生成会话ID,调用会话值、数据库值和浏览器cookie,通过验证方法/函数运行它们,并返回值。 header("location:page.php"); exit; - 退出会停止加载任何其他代码。 【参考方案1】:

你为什么不使用header("location: hauptseite_slim.php");


这是我认为最好的做法:

header("location: hauptseite_slim.php");
exit;

【讨论】:

不会妨碍上述页面输出。此外,答案应该不仅仅是one-liner。如果它以问号结尾,则可能不是偶数。 因为我一般都是用这个代码扔到一页,没有用过你上面用的技术,还没有比较过。但是是的,我同意其他的 cmets,它应该在之后添加 exit 以确保代码将在之后停止。将编辑我的答案【参考方案2】:

如果不希望发送if语句后的html,直接返回即可。

 if(!isset($_SESSION['name']))
        header("Refresh: 0; url=hauptseite_slim.php");
        return;
    

【讨论】:

以上是关于使用 php header("Refresh") 重定向时的延迟 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 PHP Header("Location: ") 函数重定向

使用 php header("Refresh") 重定向时的延迟 [重复]

php执行了header("Location: index.php");后面程序会继续执行吗?

使用PHP发送简单电子邮件

header("Location: url") 不重定向

从 header() 获取 PHP 内容类型