0

私の問題に対する既存の回答を見てきました。

プロセス全体で値をエコーし​​、「header('Location」命令まで値はそのまま残ります。

同様の問題について提案されているように、シリアル化の問題ではないと思います...

クラスの関連部分は次のとおりです。

class clsSetUser {
  protected $UserID = 0;

  public function initUser($id) {
     // get user details from database

     $this->setUserID($id);
     // etc...
  }

  private function setUserID($value) { $this->UserID = $value; }
  public function getUserID() { return $this->UserID; }
}

common.php:

if(unset($clsUser)) $clsUser = new clsSetUser;

login-exec.php:

$clsUser->initUser($id);   

header("Location: somewhere.php");

どこか.php:

echo $clsUser->getUserID();

// here it equals 0

何か案は?「ヘッダー」はすべてをシリアル化しますか?

4

1 に答える 1

0

これは、PHP が .NET で白紙の状態から実際に開始されるためsomewhere.phpです。

header("Location: somewhere.php");別のページに接続するコマンドをブラウザに送信します。このページでは、前のページの変数は PHP で使用できません。

$_SESSIONユーザーが にアクセスしたときにユーザーをデータベースからリロードできるように、 に userId を設定する必要がありますsomewhere.php

login-exec.php

$clsUser->initUser($id);   
$_SESSION['user_id'] = $id;
header("Location: somewhere.php");

どこか.php

$clsUser->initUser($_SESSION['user_id']);
于 2013-06-23T14:16:51.540 に答える