$ _SESSION变量是否安全以验证登录用户?

时间:2017-04-15 06:31:44

标签: php security session

有人可以伪造$ _SESSION变量吗?使用$ _SESSION存储一些变量以确定用户是否已登录以及他/她具有哪个用户ID是否安全?是否有人试图通过黑客会话ID冒充他人?

我正在从数据库中检索哈希密码,然后我存储一个会话以确定用户是否已登录:

// Check username or email
$data = mysql_query("SELECT * FROM Users WHERE Username = '$username' OR Email = '$username'");
$num_rows = mysql_num_rows($data);
if($num_rows <= 0){ // Does username exist??
        // ERROR MESSAGES
        echo '<div class="error_messages";>';
        echo 'Login combination is incorrect.';
        echo '</div>';            
}else{ // It exists, now checks password
    while($row = mysql_fetch_array( $data )) {
        $username_id = $row['id'];
        $existingHashFromDb = $row['Password']; // Hash from db
        $first_name = $row['FirstName'];
    }

    $isPasswordCorrect = password_verify($password, $existingHashFromDb);

    if ( $isPasswordCorrect){ // Password is correct, user has logged in successfully!!
        // Create a session saying that we are logged in
        // And another session to store user's id
        $_SESSION['loggedIn'] = true;
        $_SESSION['userId'] = $username_id;

        echo '<div class="success_messages";>';
        echo 'Welcome back, ' . $first_name . '!';
        echo '</div>';                
    }else{
        echo '<div class="error_messages";>';
        echo 'Login combination is incorrect.';
        echo '</div>';                   
    }

然后我只需使用此功能检查谁登录:

//checks if the user is logged in with the cookie on the browser, it returns 1 if logged, otherwise returns 0
function checkslogged()
{
    if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
        return 1;
    }else return 0;
}

这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

会话比Cookie更安全。在php中破解会话ID是不可能的。 这是检查登录用户的完美方式。

答案 1 :(得分:1)

解决问题的一个更好的方法是提出一个不同的问题。 而不是&#34;我的上下文是否足够安全?&#34;,问问自己,即使在非安全的环境中,我的解决方案也是安全的吗?&#34;。 例如,在用户登录时,您可以生成随机令牌并将其分配给客户端,同时将其存储在您的数据库中。然后,每个进一步的操作都要求用户将您的令牌传递给您,以保证请求的真实性。通常这是通过将它放在请求的头数据中,或者在$ _SESSION超全局数组中完成的(后者是Codeigniter的Session Helper采用的解决方案,流行的PHP MVC框架)