2012-01-01 26 views
0

私は認証されたエリアに含まれるログアウトリンクを作成しようとしています。このPHPはなぜ機能しないのですか?

許可面積は次のようになります。

<?php require_once '../../includes/initialize.php'; 
if(!$Session->is_logged_in()) { redirect_to('login.php'); } 

$user = $User->find_by_id($Session->user_id); 

?> 


<!-------------- START OF LOGOUT LINK --------------> 


<?php 
if (isset($_GET['logout'])) 
{ 
    $Session->logout($user); 
    $Logger->logout($user); 
    redirect_to('login.php'); 
} 
?> 

<p style="float: right;"><a href="?logout=true">Logout</a></p> 


<!-------------- END OF LOGOUT LINK --------------> 


<p>Welcome <?php echo $user->first_name; ?>, you are now logged into the admin area.</p> 

上記のコードは正常に動作します!

しかし、ログアウトリンクがインクルードになるように変更すると、エラーが発生します。これは私が私の中に入れたものをlogoutlink.phpと呼ばれるファイルが含まれている:私は次のエラーを取得

<?php require_once '../../includes/initialize.php'; 
if(!$Session->is_logged_in()) { redirect_to('login.php'); } 

$user = $User->find_by_id($Session->user_id); 

?> 


<!-------------- START OF LOGOUT LINK --------------> 


<?php include '../../includes/logoutlink.php'; ?> 


<!-------------- END OF LOGOUT LINK --------------> 


<p>Welcome <?php echo $user->first_name; ?>, you are now logged into the admin area.</p> 

<?php 
if (isset($_GET['logout'])) 
{ 
    $Session->logout($user); 
    $Logger->logout($user); 
    redirect_to('login.php'); 
} 
?> 

<p style="float: right;"><a href="?logout=true">Logout</a></p> 

を私はその後のような私の権限の領域にそれを含めます注意:未定義変数:セッション...

&

致命的なエラー:誰かが私には欠けているものを説明することができますで...

非オブジェクトのメンバ関数ログアウト()の呼び出し?あなたの助けを前にありがとう。

+0

どのラインでエラーが発生していますか? –

+0

$ Session-> logout($ user)について不平を言っています。私が言及したように、私がインクルードを使用しない場合、それはうまく動作します。 – Nathan

答えて

1

は、あなたの一番上logoutlink.phpファイルでglobal $Session;を設定してみてください、あなたのlogoutlink.php内

require_once '../../includes/initialize.php'; 

を入れてみてください。

+0

それはトリックでした! $ Sessionがこのインクルードファイルのローカルとみなされた理由を理解してもらえますか? – Nathan

+0

私の推測によれば、 '$ Session'は' initialize.php'でインスタンス化されました。これは「インクルード」です。私は変数がインクルードされたファイルから始めることはできず、親ファイル全体にまたがって別のインクルードファイルにまたがっていると思います。あなたが 'global $ Session;'を親ファイルに含めると、それもうまくいくはずです。 PHP変数スコープの詳細はこちら:http://php.net/manual/en/language.variables.scope.php –

+0

優秀!これは大いに役立ちます。ありがとうございました。私は含まれているlogoutlink.phpファイルを、その中のすべてがローカルである関数に類推しています。それは考える公正な方法でしょうか? – Nathan

1

$ Sessionを使用していて、$ _Sessionを使用していないことに気付きました。 $ Sessionがinitialize.php内のユーザー定義の変数がある場合

、その後、

+0

はい、$ Sessionはユーザー定義のオブジェクトです。私はあなたの提案を試みたが、うまくいかなかった。 – Nathan

関連する問題