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

时间:2017-01-29 12:47:30

标签: php authentication cookies

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

有一个index.php,其中包含需要“保护”的所有内容。我将在这里复制我的代码的相关部分。

更新了index.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()确定没有经过适当身份验证的用户,则将包含login.php并停止脚本的其余部分。

更新了login.php:

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

我想象的可能是,如果登录详细信息正确,login.php会设置一个cookie,并刷新页面。然后index.php将检测cookie,并跳过登录部分。

登录很简单,感谢Juned,我认为它现在正在运行。但是我不知道这有多安全?

从1到非常规,我有多错?

1 个答案:

答案 0 :(得分:1)

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

这有帮助吗?

login.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
    }

?>

index.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;
    }
?>