0

新しいログインクラスを作成するindex.phpページがあります(ログインクラスは、データの処理、セッションの作成、リダイレクトなどをすべて行います)

index.php新しいログインクラスを作成します

  require_once('login.class.php');  
  $login = new Login;

ログインコンストラクタは次のようになります

public function __construct(){
    // Start session and open a database connection 
    session_start();
    $this->connectToDB();
}

ユーザーが正常にログインした場合、私はユーザーをsecurePage.phpにリダイレクトします。

securePage.phpで次のことを行うと

$test = $_SESSION ['usrData'];
var_export($test->getFirstName());
var_export($test->getLastName());
var_export($test->isAuthorized());

次のエラーが表示されます

致命的なエラー:17行目の/login/securePage.phpにある非オブジェクトのメンバー関数getFirstName()を呼び出す

しかし、私が置くとき

$login = new Login;

の前に

var_export($test->getFirstName());
var_export($test->getLastName());
var_export($test->isAuthorized());

できます!何ができるのかわからない、何か間違ったことをしているのか

session_start();

それ以外の

$login = new Login;

しかし、それでもエラーが発生します

致命的なエラー:16行目の/login/securePage.phpにある非オブジェクトのメンバー関数getFirstName()を呼び出す

4

3 に答える 3

1

いくつかのことが考えられます:

-セッションを使用するすべてのページの上部で session_start() を実行する必要があります。

- シリアル化されたオブジェクト (セッション変数に格納されたオブジェクト) では、オブジェクト クラスが参照される場所に含まれている必要があります。

あなたが session_start() をしなかった可能性が高いですか?

また、リソース変数 (データベース ハンドル、ファイル ハンドルなど) は、セッション変数で発生するシリアライゼーション/デシリアライゼーションに耐えられません。

于 2011-08-26T03:32:31.307 に答える
0

リダイレクトを発行する前にセッションを閉じることをお勧めします (ただし、ブラウザーが新しいページを要求するまでセッションが書き込まれない可能性は低いと思います)。

「var_export($login);」という行は何をしますか? securePage.php 内で生成しますか? (致命的なエラーの原因となっている呼び出しをコメントアウトします)。

于 2011-08-26T13:38:37.330 に答える
0

変数名に関係があると思います。私が間違っていなければ、securePage.php のコードは次のとおりです。

$login = $_SESSION ['usrData'];
var_export($login);
var_export($test->getFirstName());

そのはず:

$login = $_SESSION ['usrData'];
var_export($login);
var_export($login->getFirstName());

それが役に立てば幸い。

于 2011-08-26T14:09:02.837 に答える