美好的一天, 我在做一個網站,我有一個小問題。當我登錄一個用戶時,如果他是一個簡單的用戶或管理員,php代碼會從數據庫中獲取信息。重定向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的是不確定的,我要重新登錄。有什麼問題?
你可能忘了'session_start()'。這必須在使用$ _SESSION的** EVERY **腳本上執行... –
您在哪裏定義_SESSION ['userrole'] – devpro
什麼是「網絡端」? – CodeGodie