Web サイトに管理システムとユーザー システムがあります。ユーザー システムの一部のデータは変更されませんが、代わりに管理者データが変更されます。だから、私のウェブサイトの残りの部分に干渉しないように、管理者セッション (ログイン時) を管理者ディレクトリ (/admin) のみに制限する方法があるかどうか疑問に思っていましたか?
ありがとう、
ルーカス
このようなものを処理する方法はたくさんあります。おそらく最も簡単な方法は、アクセス許可を確認し$_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 パターンがある場合は、正規表現一致を使用してください。
これは解決策ではありませんが、回避策です。これにも同じセッションを使用できます。パス名で各パスのセッション識別子を作成するだけです
$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';
このようにして、パスに依存しないセッション変数の値を取得できます。
session_name
呼び出す前に使用しsession_start
ます。そのため、ユーザー領域と管理領域を区別できる場合があります。
ユーザー
session_name("user");
session_start();
管理者
session_name("admin");
session_start();
質問を完全に理解できたかどうかはわかりませんが、ユーザーが管理者であるかどうかはいつでも確認できます。そうでない場合は、管理システムからユーザー システムにリダイレクトするだけです。