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 クラスを new として宣言する必要があるため、すべての変数が保持されるわけではありません。

ログイン関数で宣言された Dashboard.php の User クラス変数にアクセスする方法についてのアイデアはありますか?

下手な説明で申し訳ありませんが、ご理解いただければ幸いです。前もって感謝します!

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

あなたができることは、ユーザーオブジェクトをセッションに入れることです:

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

または、シングルトンを作成することもできます。このリンクを確認してください: PHP5 でのシングルトン デザイン パターンの作成

于 2013-05-22T22:38:07.743 に答える
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 に答える