PHP会话变量在类中

时间:2014-07-30 20:57:39

标签: php

我有一个用户对象类,我有以下功能。该功能有效,它让用户登录,一切都很好。但是当我尝试在函数中创建会话变量时,它似乎不起作用。我在函数中创建了会话变量,然后在调用函数的调用页面中执行了var_dump($_SESSION)并且它是空白的。是否无法在类中创建会话变量?

 public function userLogin() {
     $success = false;
     try{
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); 
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM users WHERE username = :username AND password = :password AND status = :status LIMIT 1";

        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", $this->password , PDO::PARAM_STR );
        $stmt->bindValue( "status", "active" , PDO::PARAM_STR );            
        $stmt->execute();

        $valid = $stmt->fetchColumn();

        if( $valid ) {
            $success = true;
                session_start();
                // Set user session variables
                foreach($stmt as $row) {

                    $_SESSION["username"] = $row['username'];
                    $_SESSION["role"]     = $row['role']; 
                }

        }

        $con = null;
        return $success;
     }catch (PDOException $e) {
         echo $e->getMessage();
         return $success;
     }
 }

1 个答案:

答案 0 :(得分:1)

$_SESSION超全局变量,可随处访问。

如果您还没有这样做,则需要在设置会话之前使用session_start()

同时检查您必须查看的两个条件是否进入这些范围:

if( $valid ) {

foreach($stmt as $row) {