因此,我正在为客户端创建管理面板,并且已经设置了一个PHP
类,称为Login::isAdminLoggedIn.
,因此,目前我必须使用的方法是浏览每个页面并将其添加到顶部。
有没有一种方法可以die()
整个目录,例如
--- Admin (die this one)
--- index.php (inherited)
--- logout.php (inherited)
因为要花很长时间才能全部添加,而且代码很多。
如果需要,我可以分享Login::isAdminLoggedIn
类。
如果PHP
无法做到这一点,我也在页面上使用jQuery/Ajax
,这也是一种选择。
---在这里编辑代码---
<?php
class Login {
public static function isLoggedIn() {
if (isset($_COOKIE['TBCookie'])) {
if (DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['TBCookie'])))) {
$userid = DB::query('SELECT user_id FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['TBCookie'])))[0]['user_id'];
if (isset($_COOKIE['TBCookie_'])) {
return $userid;
} else {
$cstrong = True;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong));
DB::query('INSERT INTO login_tokens VALUES (\'\', :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$userid));
DB::query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>sha1($_COOKIE['TBCookie'])));
setcookie("TBCookie", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE);
setcookie("TBCookie_", '1', time() + 60 * 60 * 24 * 3, '/', NULL, NULL, TRUE);
return $userid;
}
}
}
return false;
}
public static function isLoggedInAdmin(){
$userid = Login::isLoggedIn();
$admin = DB::query('SELECT id FROM users WHERE id = :userid AND admin = 1', array(':userid' => $userid))[0]['id'];
if($admin === null){
die('You shouldn\'t be here <a href="index.php">Go Back</a>');
}else{
return intval($admin);
}
}
}
因此,它的工作方式是将当前用户的cookie检查到login_tokens
数据库中的一个cookie中,该数据库具有user_id
列,然后从{{ 1}}。
然后将其放入user_id
中,并检查用户数据库中具有该ID的用户是否也具有等于1的管理行。
如果在用户内未找到admin,则返回null,因此页面将死掉并说出其消息。
如果用户的管理行等于1,则我返回isLoggedIn
。
---编辑功能---
如果普通用户可以访问管理区域的链接,那么我将杀死该页面,因为他们不是管理员,并且不希望他们在后端看到仅管理员可以看到的任何机密信息,这可以完成通过在PHP中调用isLoggedInAdmin
函数。
当管理员出现时,一切正常进行,他们可以访问一切。
---编辑问题---
我要问的是,他们是否是userID
的每一页的方法,而不必说DIE
并在每个页面的顶部添加die
页面。