PDO登录-添加用户级别到会话


PDO login - add user level to session

我需要从数据库添加用户级别时,他登录,不幸的是我做错了,因为它不工作在所有。我的代码看起来像:

 public $username = null;
 public $password = null;
 public $salt = "Zo4rU5Z1YyKJAASY0PT6EUg7BBYdlEhPaNLuxAwU8lqu1ElzHv0Ri7EM6irpx5w";
 public function __construct( $data = array() ) {
     if( isset( $data['username'] ) ) $this->username = stripslashes( strip_tags( $data['username'] ) );
     if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
 }
 public function storeFormValues( $params ) {
    //store the parameters
    $this->__construct( $params ); 
 }

和登录功能

 public function userLogin() {
     $success = false;
     try{
        $con = new PDO( DB_HOST, DB_USER, DB_PASS ); 
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 90";
        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
        $stmt->execute();
        $valid = $stmt->fetchColumn();
        $_SESSION['username'] = $this->username;
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $_SESSION['level'] = $rows[0]['userID'];
        $_SESSION['id'] = "6";
        if( $valid ) {
            $success = true;
        }
        $con = null;
        return $success;
     }catch (PDOException $e) {
         echo $e->getMessage();
         return $success;
     }
 }

Sumary :
我需要的:当用户登录时,从数据库表中获取他的级别,并将其添加到$_SESSION['level']
我得到什么错误:我没有得到任何错误,会话级别是空的
哪里有问题:说真的我不知道,没有得到任何错误,所以我不知道我做错了什么,所以我希望一些建议或解释

print_r of my $_SESSION:
Array ( [username] => michal [id] => 6 [loggedin] => 1 [level] => )

在写会话之前,你应该先启动它:

session_start ();

您应该使用fetch(),因为它是单行。

$stmt->execute();
if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    session_start();
    $_SESSION['username'] = $this->username;
    $_SESSION['level'] = $row['userID'];
    $_SESSION['id'] = "6";
    return true;
}

 public function userLogin() {
     try{
        $con = new PDO( DB_HOST, DB_USER, DB_PASS ); 
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 90";
        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
        $stmt->execute();
        if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            session_start();
            $_SESSION['username'] = $this->username;
            $_SESSION['level'] = $row['userID'];
            $_SESSION['id'] = "6";
            return true;
        }else{
            return false;
        }
        $con = null;
        return $success;
     }catch (PDOException $e) {
         echo $e->getMessage();
         return false;
     }
 }