PHP - 从整个应用程序访问我的用户类

时间:2013-05-22 22:32:15

标签: php oop web login pdo

我目前正在编写登录脚本,因为我正在尝试使用OOP学习PDO。我有一个index.php页面,它只包含一个登录表单。然后我有一个User类,它看起来像这样:

<?php
include_once('database.php');
session_start();
class User{
public $id;
public $username;
public $password;
public $firstname;
public $lastname;

public function Login($username, $password) {
    $db = new Database;
    $db = $db->dbConnect();

    $query = "SELECT * FROM users WHERE username = ? AND password = ?";

    $statement = $db->prepare($query);
    $statement->bindParam(1, $username);
    $statement->bindParam(2, $password);
    $statement->execute();

    $rows = $statement->rowCount();
    $data = $statement->fetchAll();

    if( $rows == 1 ) {
        $this->id = $data[0]['id'];
        $this->username = $data[0]['username'];
        $this->password = $data[0]['password'];
        $this->firstname = $data[0]['firstname'];
        $this->lastname = $data[0]['lastname'];

        $_SESSION['SESSID'] = uniqid('', true);
        header("location: dashboard.php");
    }
}
}
?>

当用户登录后,他/她会转到dashboard.php。我想从那里访问当前的User类,所以我可以使用echo $ user-&gt; username。但是在dashboard.php中,我必须将User类声明为new,因此它不会保留所有变量。

您对如何在登录功能中声明的Dashboard.php中访问User类变量有什么想法吗?

对不起的解释感到抱歉,但我希望你理解。提前谢谢!

3 个答案:

答案 0 :(得分:1)

首先将您的用户类定义放在另一个文件中,然后像执行database.php一样加载它。在那里,您只希望您的课程定义没有会话启动业务... <?php class User {....} ?>(结束?&gt;是选项)。

所以你现在需要访问用户对象的页面上的内容是

<?php
include_once('database.php');
include_once('user.php');
session_start();

然后在用户成功登录后,您将用户塞进会话中。

$_SESSION["user"] = $user;

然后当你想要了解它时,只需说出

$user = $_SESSION["user"];
echo $user->username;

答案 1 :(得分:0)

您有两个选择:

a)您将所有登录信息存储在会话中。 b)您只存储用户ID和用户已登录的某种标识符,并创建另一种方法,每次加载页面时都会从数据库加载信息(实际上是个坏主意)

例如,您可以将以下方法添加到您的类中,以实现上述功能以及更多功能:

function createUserSession(array $userData) {
   // Create / save session data 
}

function readActiveUserSession() {
   // Read current user information
}

function destroyActiveUserSession() {
   // Call to destroy user session and sign out
}

当然,您必须在方法中添加适当的代码。

答案 2 :(得分:0)

您可以做的是,将您的用户对象放入会话中:

$obj = new Object();    
$_SESSION['obj'] = serialize($obj);    
$obj = unserialize($_SESSION['obj']);

或者你可以创建一个单身人士,看看这个链接: Creating the Singleton design pattern in PHP5