有没有一种方法可以过滤/抑制HTML进入客户端


is there a way to filter/suppress HTML from making it to the client?

我是php的新手,很难建立正确的会话管理。控制以防止未经授权访问我的网站的特定部分。我举一个例子。。。

myimaginarysite.com/application/index.php有一个表单来对用户进行身份验证,在成功进行身份验证后,它会将您重定向到"portal.php"portal.php"将作为include的一部分检查有效会话,然后在此基础上通过header("location….")将u发送回身份验证或者只是加载HTML内容。现在,如果未经授权的用户直接点击"portal.php"。。因为他们没有有效的会话。。它们将被重定向回索引,但是,如果你代理流量,你会看到"portal.php"的整个HTML内容在重定向回登录页面之前实际上会被发送到客户端(尽管没有显示在浏览器上)。所以我的问题是……我是不是遗漏了什么,有没有办法确保HTML内容被抑制,并且不会发送到客户端??

下面是我为"portal.php"编写的代码片段

<?php 
include "includes/checksession.php";
?>

<html>
<body>
<a href="../status.php">Who Am I ??</a>
<br></br>
<a href="../logout.php">Log Off</a>
.....bunch of authenticated content.....
</body>
</html>

使用die()exit()发送重定向标头后,需要停止脚本执行。标头重定向仅设置http标头,否则页面内容是相同的,除非您另有指示。

像Juhana建议的那样,停止脚本执行可能是目前最简单的解决方案,但当然还有其他可能性。您可以将输出设为条件:

<?php 
if (checkSession())
{
  // redirect to login page
}
else
{
  // output HTML.
}

如果你的网站变得更大,它可能(希望)也会更结构化。如果是这样,那么包含其他页面片段可能会更容易。所以你的代码一开始可能是这样的:

if (!checkSession())
{
  include 'loginpage.php';
}
else
{
  include 'portalpage.php';
}

最终可能:

if (!checkSession())
{
  ApplicationContext.setController(new LoginPageController());
}

无论在何种情况下,exit都能很好地工作,可能很有用,尤其是对于这样的情况,但它无疑会终止您的脚本,因此它可能会妨碍您可能想要包括的其他进程,如调试输出或日志记录、评测等。