美好的一天,我正在制作一个网站,我有一个问题。当我登录一个用户时,如果他是一个简单的用户或管理员,php代码会从数据库中获取信息。
<?php
require("session.php");
if(!empty($_POST)){
$user='';
$log_control=false;
$q="SELECT id,username,email,salt,password FROM users WHERE username=:username LIMIT 1";
$q_par=array(':username'=>$_POST['user']);
try{
$statment=$dbh->prepare($q);
$res=$statment->execute($q_par);
}catch(PDOException $e)
{
die("Can't execute query:" . $e->getMessage());
}
$row=$statment->fetch();
if($row)
{
$pswd_check=hash('sha256',
$_POST['password'] . $row['salt']);
for($i=0;$i<65536;$i++)
{ $pswd_check=hash('sha256', $pswd_check . $row['salt']); }
if($pswd_check===$row['password'])
{ $log_control=true; }
if($log_control)
{
$q="SELECT userrole FROM users WHERE username=:username LIMIT 1";
$q_par=array(':username'=>$_POST['user']);
try{
$statment=$dbh->prepare($q);
$res=$statment->execute($q_par);
}catch(PDOException $e)
{
die("Can't execute query:" . $e->getMessage());
}
$role = $statment->fetchColumn();
if($role=='U'){
unset($row['salt']);
unset($row['password']);
$_SESSION['user'] = $row;
header("Location: user.php");
die("Redirecting to: user.php");
}
if($role=='S'){
unset($row['salt']);
unset($row['password']);
$_SESSION['user'] = $row;
header("Location: admin.php");
die("Redirecting to: admin.php");
}
}else
{
echo '<div class="alert">Password or username is wrong!</div>';
$user=htmlentities($_POST['user'],
ENT_QUOTES, 'UTF-8');
}
}
} ?>
所以,这是我尝试登录用户的一部分。但是在同一页面代码的另一部分,我试图控制用户是否已登录。同时,我正在尝试获取他是用户还是管理员的信息。有了这个:
<?php
if(isset($_SESSION['user'])){
if($_SESSION['userrole']=='U'){
header("Location: user.php");
}
if($_SESSION['userrole']=='S'){
header("Location: admin.php");
}}
?>
但是当我再次访问此页面(登录后)时,它不会重定向我,它说用户角色未定义,我必须再次登录。怎么了?
错误非常明显 未定义的变量。
您没有在代码中定义此变量:
$_SESSION['userrole']
您的会话工作正常,您只需要在定义 $_SESSION['user'] 的位置定义角色。