我有下面的代碼來檢查登錄:我的系統不限制登錄,如果管理員
class User extends Password {
private $_db;
function __construct($db) {
parent::__construct();
$this->_db = $db;
}
private function get_user_hash($user) {
try {
$stmt = $this->_db->prepare('SELECT admin_id, user, pass FROM boss WHERE user = :user AND type = "admin"');
$stmt->execute(array('user' => $user));
return $stmt->fetch();
} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}
public function login($user,$password) {
$row = $this->get_user_hash($user);
if($this->password_verify($password,$row['pass']) == 1) {
$_SESSION['loggedin'] = true;
$_SESSION['user'] = $row['user'];
return true;
}
}
public function logout() {
session_destroy();
}
public function is_logged_in() {
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
return true;
}
}
}
$user = new User($db);
一切工作正常,問題是,我有內每兩個目錄「admin」和「用戶」是「相同的文件」與每個文件夾中是設置中的不同查詢的唯一區別:
管理:SELECT admin_id, user, pass FROM Boss WHERE user = :user AND type = "admin"
用戶:SELECT admin_id, user, pass FROM users WHERE user =:user AND type = "user"
當更改/管理員/用戶我的驗證碼(上面)應區分是否管理員。因爲它沒有,它會通過會話並繼續訪問,因爲檢查是這麼認爲的。
在每一頁上的 「私人」 我把以下內容:
if ($user-> is_logged_in()) {header ('Location: user-area.php');}
我該怎麼辦?
如果您需要更多的代碼來找到解決方案,只需知道它。
我認爲這個問題是在功能函數「is_logged_in」,因爲它必須修改配置文件管理,否則檢查,如果管理爲例(不喜歡做的事):
public function is_logged_in_admin() {
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true && $row['type'] == "admin") {
return true;
}
}
,然後檢查:if($user->is_logged_in_admin()){header('Location: index.php?ruta=panel');}
這將是很好,或者什麼是正確的方式?
基於用戶ID你有一種方法知道它是否應該是管理員? – slopeofhope
@slopeofhope是的。表「老闆」有一行爲「類型」(type =「admin」) – GePraxa
那麼爲什麼不能做一個函數來檢查用戶是否是admin,並設置如下標誌$ _SESSION ['admin'] = True或者錯誤 – slopeofhope