如何通过会话令牌和 Cookie 安全地进行身份验证?更新



我尝试编写自己的身份验证方法(学校项目),但我被卡住了。请告知如何解决安全身份验证:

有一个索引.php其中包含需要"保护"的所有内容。我将在此处复制代码的相关部分。

更新的索引.php

session_start();
function checkUserAuth(){
    $authStatus = false;
    if (isset($_SESSION['PHPSESSID'])){
        if ($_SESSION['PHPSESSID'] == $_COOKIE['PHPSESSID']){
            $authStatus = true;
        }
    }
    return $authStatus;
}
if(!checkUserAuth()){
    include_once(dirname(__DIR__).'/admin/authentication/login.php');
    exit();
}

如果 checkUserAuth() 确定没有经过正确身份验证的用户,则将包括登录名.php并停止脚本的其余部分。

更新登录.php:

if(array_key_exists($username, $users) && password_verify($password, $users[$username])){
    $_SESSION['PHPSESSID'] = $_COOKIE['PHPSESSID'];
    $_SESSION['login_user'] = $_POST['user'];

我想可能会发生的事情是,如果登录详细信息正确,登录.php设置cookie并刷新页面。然后索引.php将检测cookie,并跳过登录部分。

登录名已经基本弄清楚了,多亏了Juned,我认为它现在可以工作了。但是我不知道这有多安全?

从1到非常,我错得有多离谱?

有很多方法可以做到这一点。下面的伪代码不是最有效的,但应该可以工作,我认为你上面所做的实际上不会起作用。

这有帮助吗?

登录.php伪代码

<?php
    session_start(); // this function checks if there's a session ID already set, if not, sets one.
    if(array_key_exists($username, $users) && password_verify($password, $users[$username])){
        // do your login details checking here
            // if login details correct
                // set a flag in the $_SESSION superglobal and whatever else you want to store about the user like their username e.g.
                    $_SESSION["loggedIn"] = true;
                    $_SESSION["username"] = "$_POST['user']"; // better practice to fetch a clean version from your database
            //else return user to login page
    }
?>

索引.php伪代码

<?php
    session_start(); // this will fetch the session ID and other variables that you might have set e.g. username, logged in status
    function checkUserAuth(){
        $authStatus = false;
        if (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] === true){
            $authStatus = true;
        }
        return $authStatus;
    }
    if(!checkUserAuth()){
        // redirect to login page. e.g.
        header('Location: login.php');
        exit;
    }
?>

最新更新