好的,我在这里有一些代码:
<?php session_start();
if (!isset($_SESSION['blah'])) {
header('Location: foo.php'); exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset = 'utf-8' />
<title>Check Login</title>
</head>
<body>
// members only content here
</body>
</html>
所以,我发现使用头文件或退出语句进行重定向(通过根据if-else语句的值回显特定文档)是一种万无一失的方法,但使用头文件比回显更清晰heredoc中的整个网页。 (我也知道我应该使用HTTPS来提高安全性。)
我有两个问题。
浏览器对Location
标头的支持有多广泛?我知道我不能通过阅读类似的问题来单独使用它,但无论如何我都不会介意。
此外,使用php exit()
函数维护系统安全性的可靠性如何?它是否总是有效,或者当安全真的重要时,我应该回应HEREDOC吗?
答案 0 :(得分:1)
现在几乎所有现有浏览器都支持Location
;但是,您应该注意随之发送的状态代码(第3个参数为header
)。有关选择哪些代码的详细信息,请参阅rfc2616 sec10; 303似乎更正确但302更好地支持。
exit()
的可靠程度,取决于您的服务器的可靠性。如果执行了PHP代码,exit()
将始终中止执行并将结果发送到浏览器。但是,错误配置的Web服务器可能会直接暴露您的PHP代码而不是执行它。 This comment解释了如何缓解此问题。
至于遵守规范,rfc2616 sec10说:
除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释。
您可以不使用exit()
,而是使用die('<a href="foo.php">You are redirected.</a>')
来实现此目的。