这看起来应该很简单,但我遇到了一些麻烦。
我有一个索引页面,它既是登录页面又是主要内容页面,具体取决于是否设置了会话变量。
我尝试过使用JavaScript来回应PHP以处理重定向,但它看起来很草率并需要一点时间,所以我切换到使用标题(“location:abc.php”)。将其用于索引页面的问题在于它在发送输出后不起作用。我也尝试使用元标记来刷新页面,但这并不适用于所有浏览器。
处理这种情况的最佳方法是什么?
提前致谢。
答案 0 :(得分:1)
您可以使用其中任何一种。但是,header("location: abc.php")
在发送回复后无效!解决方法很简单。使用输出缓冲。
<?php
ob_start()
//here goes many lines of your wonderful php code blocks
//now send the header based on your logic
header("location: abc.php")
ob_end_flush()
请查看official docs了解详情
更新:
您可以考虑@zerkms的建议。如果您确实需要静默重定向到其他页面,请在使用header()
函数发送任何输出之前执行此操作。但是,如果您想表明您正在重定向他/她,您可以使用javascript,因为您正在使用!对于后者,您还可以使用Meta Refresh
<meta http-equiv="refresh" content="5;URL='http://example.com/'">
ob_start()
对此有所帮助。因为,您可能会在页面上显示许多内容,然后告诉他/她将被暂时重定向。以上示例将在5秒内将用户重定向到example.com。
答案 1 :(得分:1)
<?php
session_start();
//all of the php code goes here
header("location: samepage.php")
?>
确保你的所有php代码都在浏览器的顶级而不使用任何echo命令 - 否则你最终会在页面顶部显示一些echo - 而不是使用echo命令使用变量更可靠,然后在必要时在html体中使用变量。
答案 2 :(得分:0)
这样做你想要的吗?
<?php
session_start();
if ($_SESSION['logged_in']) {
header("Location: mainpage.php");
exit();
}
// Display login form
答案 3 :(得分:-1)
你可以试试这个
<强> JAVASCRIPT 强>
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
}
<强> HTML 强>
<!--The page will refresh every 5 seconds.-->
<body onload="timedRefresh(5000)">