0

我目前正在编写登录脚本,因为我正在尝试使用 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->username 。但是在dashboard.php 中,我必须将User 类声明为新的,因此它不会保留所有变量。

您对我如何访问登录函数中声明的 Dashboard.php 中的用户类变量有任何想法吗?

很抱歉解释不好,但我希望你能理解。先感谢您!

4

3 回答 3

1

首先将您的用户类定义放在另一个文件中,然后像您的database.php. 在那里你只想要你的类定义,没有任何会话开始业务...... <?php class User {....} ?>(结束?> 是可选的)。

因此,您现在在需要访问用户对象的页面上拥有的是

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

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

$_SESSION["user"] = $user;

然后当你想得到它的时候就说

$user = $_SESSION["user"];
echo $user->username;
于 2013-05-22T22:40:13.667 回答
0

您有 2 个选项:

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
}

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

于 2013-05-22T22:35:50.547 回答
0

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

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

或者你可以创建一个单例,查看这个链接: 在 PHP5 中创建单例设计模式

于 2013-05-22T22:38:07.743 回答