我在这里有这个类,我想要做的是,如果检查某些东西等于false,那么用户将被重定向到根域路径。但它不起作用。 这是班级
class security {
function checkAuth() {
if(isset($_COOKIE['AUTHID'])) {
$cookie = $this->secure($_COOKIE['AUTHID']);
$query = mysql_query("select username,password,active from tbl_users where password = '$cookie'") or die(mysql_error());
while($row = mysql_fetch_assoc($query)) {
//check if cookie is set
if(!isset($_COOKIE['AUTHID'])) {
header("Location: ".realpath($_SERVER['HTTP_HOST']));
}
//check if user is active
if($cookie == $row['password']) {
if($row['active'] == '0') {
setcookie("AUTHID","",time() - 100000);
header("Location: ".realpath($_SERVER['HTTP_HOST']));
}
else { //user is active
}
}
//check if hash in cookie matches hash in db
if($cookie != $row['password']) {
setcookie("AUTHID","",time() - 100000);
header("Location: ".realpath($_SERVER['HTTP_HOST']));
}
}
}
}
}
?>
答案 0 :(得分:6)
尝试
$_SERVER['SCRIPT_URI'];
或
"http://" . $_SERVER['HTTP_HOST'];
而且,是的,退出();发送该标题后。
不要忘记为重定向发送适当的30x header response code
答案 1 :(得分:3)
为什么不简单:
header('Location: /');
答案 2 :(得分:3)
来自PHP doc:
'HTTP_HOST':当前请求中Host:header的内容(如果有)。
在我看来,这是从客户端浏览器发送的值,因为客户端可以更改请求标头,我认为最好使用SERVER_NAME:
'SERVER_NAME'当前服务器主机的名称 脚本正在执行。如果脚本在虚拟主机上运行, 这将是为该虚拟主机定义的值。
我认为正确的做法是:
header("Location: http://{$_SERVER['SERVER_NAME']}/");
die();
评论“位置:/”
如Header Field Definitions中所述,通过位置标头重定向应使用包含http://www.servername.com/redirect/to/this/resource.html的绝对URI,而不仅仅是/redirect/to/this/resource.html。 (但它可以重定向到/,但它不是100%正确的。)
编辑:自2014年6月起,可以使用绝对和相对网址。请参阅已替换旧版RFC 7231的RFC 2616,其中只允许使用绝对网址。
答案 3 :(得分:0)
realpath
function正在处理文件系统并返回规范化的绝对文件系统路径。
但你需要的是一个URI。所以试试这个:
header("Location: http://".$_SERVER['HTTP_HOST']."/");
exit;
答案 4 :(得分:0)
我在所有开发程序中,在包含非公共脚本的每个目录中使用它......
<?php $url = 'http://' . $_SERVER['HTTP_HOST']; header('Location: ' . $url, true, 301);?>