我目前正在编写登录脚本,因为我正在尝试使用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类变量有什么想法吗?
对不起的解释感到抱歉,但我希望你理解。提前谢谢!
答案 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