我正在用 PHP 创建一个安全登录系统。
在管理区域的每个页面上,我想确保用户正确登录,他的帐户仍然启用,用户与其登录详细信息连接一次(当用户第一次登录时,active_user状态设置为 1)。
function isCookieValid() {
global $pdo;
$isValid = false;
if(isset($_COOKIE["rememberUser"])) {
$decryptCookie = base64_decode($_COOKIE["rememberUser"]);
$user_id = explode("mMUa26yB943jRaJl755OM18jgR", $decryptCookie);
$user_id = $user_id[1];
$sqlQuery = "SELECT * FROM users WHERE id_user = :id";
$stmt = $pdo->prepare($sqlQuery);
$stmt->execute(array(":id" => $user_id));
if ($row = $stmt->fetch()) {
if($row["enabled_user"] === 1 && $row["active_user"] === 0) {
unset($row["password"], $row["salt"]);
$_SESSION["current_user"] = $row;
$isValid = true;
} else {
logout();
}
} else {
logout();
}
}
return $isValid;
}
我要求每个页面上的数据库,对于每个用户,检查存储在计算机中的cookie(我自动激活cookie,因为对于我的应用程序需要保持所有用户长时间登录)是否对应到数据库上的 ID 用户。 如果是这样,我创建一个存储用户详细信息的变量。 然后为了保护我的页面,我使用函数 isLoggedin() ,它是:
function isLoggedin() {
if(isCookieValid()){
if(isset($_SESSION["current_user"])) {
return true;
}
}
return false;
}
那个系统是不是太重了?因为我为每个用户检查每个页面上的数据库。 提前致谢
最佳答案
你的系统并不重,也不安全。请不要使用 cookie 来验证用户,请始终使用 session 。
function isLoggedin() {
if(isset($_SESSION["current_user"])) {
return true;
} else {
// here redirect to login page to verify the user id and password..
}
}
关于php - 每个页面登录验证询问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58873224/