美好的一天, 我正在建立一个网站,我有一个小问题。当我登录用户时,如果他是一个简单的用户或管理员,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");
}}
?>
但是当我再次访问此页面(登录后)时,它不会重定向我,它表示userrole未定义,我必须再次登录。问题是什么?
答案 0 :(得分:1)
错误很明显未定义变量。
您没有在代码中定义此变量:
$_SESSION['userrole']
您的会话工作正常,您只需定义已定义 $ _ SESSION [&#39;用户&#39;]的角色。