Php $\u会话变量是否安全,以验证登录的用户?

Php $\u会话变量是否安全,以验证登录的用户?,php,security,session,Php,Security,Session,有人可以伪造$\u会话变量吗?使用$\u会话存储几个变量以确定用户是否已登录以及他/她拥有哪个用户id是否安全?有人可以通过黑客会话ID来模仿其他人吗 我正在从数据库检索哈希密码,然后存储会话以确定用户是否登录: // Check username or email $data = mysql_query("SELECT * FROM Users WHERE Username = '$username' OR Email = '$username'"); $num_rows = mysql_nu

有人可以伪造$\u会话变量吗?使用$\u会话存储几个变量以确定用户是否已登录以及他/她拥有哪个用户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>';                   
    }

这是最好的方法吗?

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

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

是的,
$\u会话
数据由服务器维护。另外,可能的重复项,如Alexander所说,请仔细阅读准备好的语句,或者至少在将变量转储到查询字符串中之前使用mysql\u real\u escape\u string()。你做事的方式真的很不安全。我不知道,谢谢!!我将检查mysql\u real\u escape\u string()并准备。
//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;
}