0

Web サイトに管理システムとユーザー システムがあります。ユーザー システムの一部のデータは変更されませんが、代わりに管理者データが変更されます。だから、私のウェブサイトの残りの部分に干渉しないように、管理者セッション (ログイン時) を管理者ディレクトリ (/admin) のみに制限する方法があるかどうか疑問に思っていましたか?

ありがとう、

ルーカス

4

4 に答える 4

1

このようなものを処理する方法はたくさんあります。おそらく最も簡単な方法は、アクセス許可を確認し$_SERVER['REQUEST_URI']、ユーザーがそのadmin/エリアにいない場合はそこにリダイレクトすることです。

// Assuming you've saved an admin flag in session
// and the user request URI doesn't contain admin/
if ($_SESSION['admin'] === TRUE && !preg_match('/admin\//' $_SERVER['REQUEST_URI'])) {
  // redirect into the admin/ area
  header("Location: http://example.com/admin");
  exit();
}

アップデート:

よくあるご要望にお応えして、admin/ ディレクトリで管理者ログインを強制する逆の手順を次に示します。

if ((!isset($_SESSION['admin'] || $_SESSION['admin'] === FALSE)  && preg_match('/admin\//' $_SERVER['REQUEST_URI'])) {
  // redirect out of the admin/ area
  header("Location: http://example.com/");
  exit();
}

preg_match()実際、管理ページが別個のスクリプトであると仮定すると、この部分では実際には必要ありません。ただし、管理スクリプトが管理ディレクトリ内のファイルから実際に提供されない可能性がある MVC パターンがある場合は、正規表現一致を使用してください。

于 2012-04-08T12:41:01.900 に答える
1

これは解決策ではありませんが、回避策です。これにも同じセッションを使用できます。パス名で各パスのセッション識別子を作成するだけです

$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';

このようにして、パスに依存しないセッション変数の値を取得できます。

于 2012-04-08T12:43:11.247 に答える
1

session_name呼び出す前に使用しsession_startます。そのため、ユーザー領域と管理領域を区別できる場合があります。

  • ユーザー

    session_name("user");
    session_start();
    
  • 管理者

    session_name("admin");
    session_start();
    
于 2012-04-08T12:47:25.533 に答える
0

質問を完全に理解できたかどうかはわかりませんが、ユーザーが管理者であるかどうかはいつでも確認できます。そうでない場合は、管理システムからユーザー システムにリダイレクトするだけです。

于 2012-04-08T12:40:03.397 に答える