我有一个php
页面,只能由管理员访问。我使用php $_SESSION
来验证用户。我在我的页面顶部有这个代码段,只能由管理员访问
if (!isset($_SESSION["uname"])) {
header("Location:../error.html");
exit;
}
if ($_SESSION["uname"] != "admin") {
header("Location:../error.html");
exit;
}
uname
变量正确传递给页面,我确信这一点。但我的验证过程并不像我预期的那样有效。任何用户都可以访问该页面。
我在这里做了什么错。
答案 0 :(得分:1)
在进行这些检查之前是否输出了任何内容,即使只有一个空行足以防止使用
重定向页面hearder()
正如其他人所说,我会确保你做到
session_start();
但我必须假设你有正确的会话值
“uname变量正确传递给页面,我确定 那。但我的验证过程并不像我预期的那样有效。任何用户 可以访问该页面。我在这里做了什么错。“
所以这导致了我的标题错误,一种方法就是添加。
ini_set('display_errors', 1);
在“验证检查”之上,这应该显示任何错误,例如“无法发送已发送的标头输出”等。
答案 1 :(得分:0)
您是否在开始时致电session_start()
功能。
除非我们在使用任何session_start
数据之前致电SESSION
,否则无效。
答案 2 :(得分:0)
您可能忘记在受限制页面的最开头和$_SESSION['uname']
被设置的页面上调用session_start()。另外,请确保$_SESSION['uname']
不包含' admin'的值。对于其他登录用户。
注意:您可以使用print_r()或var_dump()函数调试超级全局变量的值,例如$_SESSION
。
答案 3 :(得分:0)
参见下面给出的例子;
在索引或欲望页面中开始您的会话
sesstion_start();
创建此功能以自动验证和重定向
function isValidate($value, $autoRedirect = true){
if(empty($_SESSION['uname']) || $_SESSION['uname'] != $value){
if($autoRedirect){
header("Location:../error.html");
exit;
}else {
return false;
}
}
else {
return true;
}
}
现在只需调用此方法即可按名称验证会话。例如;
isValidate("admin");
isValidate("user");