php - 每个页面登录验证询问数据库

标签 php mysql security authentication

我正在用 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/

相关文章:

php - php/mysql 查询的值不正确

php - 优先级和位掩码操作

php - 带有时间戳比较的PHP MYsql删除语法问题

php - 将现有站点迁移到 Drupal 之类的 CMS 或 Zend 之类的框架,或者两者都不迁移?

java - SSO - CAS 协议(protocol) - 更新参数

php - 创建具有多个列和表变量的查询

php - 在动态表中显示信息和附件名称

mysql - Visual Basic/MySQL 显示数据

php cookie注入(inject)漏洞?

c# - 当尝试写入文件抛出 UnauthorizedAccessException 时,需求不会抛出异常