验证用户在PHP中使用$ _SESSION

时间:2014-07-08 03:45:51

标签: php session

我有一个php页面,只能由管理员访问。我使用php $_SESSION来验证用户。我在我的页面顶部有这个代码段,只能由管理员访问

if (!isset($_SESSION["uname"])) {
    header("Location:../error.html");
    exit;
}

if ($_SESSION["uname"] != "admin") {
    header("Location:../error.html");
    exit;
}

uname变量正确传递给页面,我确信这一点。但我的验证过程并不像我预期的那样有效。任何用户都可以访问该页面。 我在这里做了什么错。

4 个答案:

答案 0 :(得分:1)

在进行这些检查之前是否输出了任何内容,即使只有一个空行足以防止使用

重定向页面
hearder()

正如其他人所说,我会确保你做到

session_start();

但我必须假设你有正确的会话值

  

“uname变量正确传递给页面,我确定   那。但我的验证过程并不像我预期的那样有效。任何用户   可以访问该页面。我在这里做了什么错。“

所以这导致了我的标题错误,一种方法就是添加。

ini_set('display_errors', 1);

在“验证检查”之上,这应该显示任何错误,例如“无法发送已发送的标头输出”等。

答案 1 :(得分:0)

您是否在开始时致电session_start()功能。

除非我们在使用任何session_start数据之前致电SESSION,否则无效。

http://www.php.net/manual/en/function.session-start.php

答案 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");