从数据库中放入$ _SESSION

时间:2014-08-14 14:38:59

标签: php session

我正在尝试在用户登录时向会话中添加一些内容。例如user_level或id。

所以我的代码看起来像这样:

 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 1";

        $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;
        $_SESSION['id'] = $stmt->fetchColumn(1);

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

因为您可以看到我正在添加 用户名 并尝试添加 id 。用户名工作正常,但一旦我从数据库中获取id我就有一些问题。它没有存储,实际上如果我var_dump它说bool(false)

有人可以告诉我我做错了什么吗?或者给我一些建议。我也想知道在会话中存储用户级别和id等内容是否安全,以限制网站某些部分的访问权限。

1 个答案:

答案 0 :(得分:1)

而不是

$_SESSION['id'] = $stmt->fetchColumn(1);

考虑到您的id列被命名为id,请使用

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC)
$_SESSION['id'] = $rows[0]['id'];

直接来自PHP文档:

  

fetchColumn从结果集的下一行返回单个列,如果没有其他行,则返回FALSE。