0

こんにちは、次のファイルがあります:
login.php、index.php、header.php、footer.php、restrictaccess.php

restrictaccess.php には次のコードがあります。

<?php
session_start();
if (!(isset($_SESSION['user']) && $_SESSION['user'] != ''))
if (!(isset($_SESSION['access']) && $_SESSION['access'] != '')) 
{
header ("Location: login.php");
exit();
}


if($_SESSION['access']=="2" ) {
     echo 'You are logged on as Manager';

}
if($_SESSION['access']=="1" ) {
     echo 'You are logged on as Restricted user';
}
?>

login.php を受け入れるすべてのページに、restrictaccess.php、header.php、および footer.php が含まれています。
ヘッダーとフッターの両方には、restrictaccess.php も含まれています。これにより問題が発生しますか?とにかく、そのようなインクルードが一度だけロードされるようにすることはできますか?

現在、誰かがログオンすると、「管理者/制限付きユーザーとしてログオンしています」というメッセージが 3 回表示されます。

どうぞよろしくお願いいたします。

4

2 に答える 2

1

醜い方法

require_onceorinclude_onceを restrictaccess.php に使用します

より良い方法

restrictaccess.php を以下のみに変更します。

<?php
if (!(isset($_SESSION['user']) && $_SESSION['user'] != ''))
if (!(isset($_SESSION['access']) && $_SESSION['access'] != '')) 
{
  header ("Location: login.php");
  exit();
}
?>

次にsession_start()、すべてのクライアント ページ (ユーザーが index.php のように参照できるページ) の上部で使用します。"You are logged-in as ..." に関するコードは、header.php (または表示する意味のある場所) でのみ使用してください。

アップデート

上記のrestrictaccess.phpをファイルのどこにでも含めることができますが、ビットの前にクライアントにデータが送信されていないことを確認する必要がありheader ("Location: login.php");ます (つまり、何かがある場合echoprint_rまたはvar_dump... header ("Location: login.php");PHP がエラーを生成する前に) )

于 2013-10-17T07:27:04.673 に答える
1

require_once()を使用してファイルをインクルードしてみてください。このメソッドは、ファイルが既に含まれているかどうかを確認します。

PHP マニュアル

于 2013-10-17T07:23:35.513 に答える