ホームページ >バックエンド開発 >PHPの問題 >PHP Web サイトの異なるページへの管理者とユーザーのログインを実装する方法

PHP Web サイトの異なるページへの管理者とユーザーのログインを実装する方法

PHPz
PHPzオリジナル
2023-04-21 09:11:511888ブラウズ

多くの Web サイトでは、管理者と一般ユーザーがログイン後にアクセスできるページが異なることがよくあります。特にプライバシーと機密性を保護する必要がある Web サイトの場合、さまざまなページ デザイン ソリューションを使用することで、システムの信頼性とセキュリティを向上させることができます。この記事では、PHP Web サイトに管理者とユーザー用のさまざまなログイン ページを実装する方法を説明します。

1. セッションを例に挙げます

PHP のセッションは、ユーザーのログイン ステータスの問題を解決するように設計されています。HTTP はステートレス プロトコルであるため、各リクエストには再接続と検証が必要です。 。セッション メカニズムは、サーバー側でユーザーのステータスを保存し、セッションのステータスを維持し、クライアントとサーバーの間でセッション データを渡すことで、この問題を解決できます。

1.1 ログイン ページ

まず、管理者用とユーザー用に異なるログイン ページを設計できます。管理者ログイン ページを例に挙げると、ページのソース コードに識別子を追加して、そのページが管理者ログイン ページであることを示すことができます。例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>管理员登录页面</title>
</head>
<body>
    <h1>管理员登录</h1>
    <form action="login.php" method="post">
        <input type="hidden" name="type" value="admin">
        <label>用户名:</label><input type="text" name="username"><br>
        <label>密码:</label><input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

このページでは、hidden 要素を介して type 値を渡し、現在のログイン ページが管理者ログイン ページであることを示します。このタイプの値は、バックエンドのログイン ハンドラーで使用できます。

1.2 ログイン処理

PHP では、$_SESSION 配列を使用してセッション データを保存できます。ログイン ハンドラーでは、type 値に基づいてユーザーのログイン カテゴリを決定し、ログインに成功した後、以降のページで使用するためにユーザー情報を $_SESSION に保存できます。

例:

<?php
session_start();
if ($_POST[&#39;type&#39;] == &#39;admin&#39;) {
    //处理管理员登录
    $username = $_POST[&#39;username&#39;];
    $password = $_POST[&#39;password&#39;];
    if ($username == &#39;admin&#39; && $password == &#39;123456&#39;) {
        //登录成功
        $_SESSION[&#39;admin&#39;] = $username;
        header(&#39;Location:admin.php&#39;);
    } else {
        //登录失败
        header(&#39;Location:admin_login.php&#39;);
    }
} else {
    //处理普通用户登录
    $username = $_POST[&#39;username&#39;];
    $password = $_POST[&#39;password&#39;];
    if ($username == &#39;user&#39; && $password == &#39;123456&#39;) {
        //登录成功
        $_SESSION[&#39;user&#39;] = $username;
        header(&#39;Location:user.php&#39;);
    } else {
        //登录失败
        header(&#39;Location:user_login.php&#39;);
    }
}
?>

このログイン ハンドラーでは、フロント エンドから $_POST 配列を通じて渡された type 値を取得し、現在のログインがどのユーザー カテゴリに属しているかを判断します。管理者の場合は、ログインに成功したユーザー情報が$_SESSION['admin']に格納され、管理者ページにジャンプします。一般ユーザの場合は、$_SESSION['user']にログインに成功したユーザ情報が格納され、ユーザページにジャンプします。ログインが失敗した場合は、対応するログイン ページに戻ります。

1.3 ページの権限制御

管理者と一般ユーザーがログイン後にアクセスできるページが異なる場合、それ以降のページでも権限制御を行う必要があります。 PHP では、$_SESSION 配列の値を判断することで現在のユーザーのカテゴリを判断し、ユーザーがアクセスできるページを制御できます。

たとえば、管理者ページでは、次のような権限制御を実装できます:

<?php
session_start();
if ($_SESSION[&#39;admin&#39;] != &#39;admin&#39;) {
    header(&#39;Location:admin_login.php&#39;);
    exit();
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>管理员页面</title>
</head>
<body>
    <h1>管理员页面</h1>
    <p>欢迎 <?php echo $_SESSION[&#39;admin&#39;]; ?> 登录</p>
    <a href="logout.php?type=admin">退出登录</a>
</body>
</html>

このページでは、まず $_SESSION['admin'] の値が 'admin' であるかどうかを判断します。 ' そうでない場合は、管理者のログイン ページに移動します。その場合は、管理者ページのコンテンツを表示し、そのページにログイン ユーザー名を表示し、ログアウトするためのリンクを提供できます。

他のページの権限制御も同様の方法で実装できます。

2. Cookie を例に挙げます

セッションに加えて、Cookie を使用して管理者や別のページにログインしているユーザーの権限を制御することもできます。 PHP では、setcookie() 関数を使用して Cookie 値を設定できます。ログイン ハンドラーでは、さまざまなユーザー カテゴリに応じてさまざまな Cookie 値を設定できます。後続のページでは、Cookie の値に基づいてユーザーがアクセスできるページを制御することもできます。

2.1 ログイン処理

管理者と一般ユーザーの Cookie の設定を例として、ログイン ハンドラーに次のコードを追加できます。

<?php
if ($_POST[&#39;type&#39;] == &#39;admin&#39;) {
    //处理管理员登录
    $username = $_POST[&#39;username&#39;];
    $password = $_POST[&#39;password&#39;];
    if ($username == &#39;admin&#39; && $password == &#39;123456&#39;) {
        //登录成功
        setcookie(&#39;loginType&#39;, &#39;admin&#39;, time()+3600);
        header(&#39;Location:admin.php&#39;);
    } else {
        //登录失败
        header(&#39;Location:admin_login.php&#39;);
    }
} else {
    //处理普通用户登录
    $username = $_POST[&#39;username&#39;];
    $password = $_POST[&#39;password&#39;];
    if ($username == &#39;user&#39; && $password == &#39;123456&#39;) {
        //登录成功
        setcookie(&#39;loginType&#39;, &#39;user&#39;, time()+3600);
        header(&#39;Location:user.php&#39;);
    } else {
        //登录失败
        header(&#39;Location:user_login.php&#39;);
    }
}
?>

このコードでは、次のコードを使用します。 setcookie() 関数を使用して、loginType という名前の Cookie を設定し、管理者と一般ユーザーに対して異なる Cookie 値を設定します。この Cookie は、ユーザーが正常にログインした後、後続のページで使用するためにローカル クライアントに保存されます。

2.2 ページ権限制御

ページにアクセスする際、Cookieの値を判断することで現在のユーザーのカテゴリを判断し、権限制御を行うことができます。 PHP では、$_COOKIE 配列を通じてクライアントによって保存された Cookie 値を取得して、アクセス許可の制御を実現できます。

たとえば、管理者ページでは、次のような権限制御を実装できます:

<?php
if ($_COOKIE[&#39;loginType&#39;] != &#39;admin&#39;) {
    header(&#39;Location:admin_login.php&#39;);
    exit();
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>管理员页面</title>
</head>
<body>
    <h1>管理员页面</h1>
    <p>欢迎 <?php echo $_COOKIE[&#39;loginType&#39;]; ?> 登录</p>
    <a href="logout.php?type=admin">退出登录</a>
</body>
</html>

このページでは、$_COOKIE['loginType'] の値が 'admin' であるかどうかを判断します。現在のユーザーのカテゴリを特定します。そうでない場合は、管理者のログイン ページに戻ります。その場合は、管理者ページのコンテンツを表示し、そのページにログイン ユーザー名を表示し、ログアウトするためのリンクを提供できます。

他のページの権限制御も同様の方法で実装できます。

概要

上記の例から、PHP Web サイトでは、管理者とユーザーの異なるページへのログインを実装するために、セッションまたは Cookie を使用してユーザーのステータスを保存できることがわかります。ユーザーの状態を判断して、ユーザーがアクセスできるページを制御します。さまざまな方法を使用することで、さまざまなアプリケーション シナリオに合わせて選択できるようになります。どの方法を使用する場合でも、情報の安全性と信頼性の確保に注意を払う必要があります。同時に、権限制御を実装する際には、アプリケーションの拡張性や保守性も考慮する必要があります。適切な権限制御スキームは、システムのセキュリティと安定性を向上させ、ユーザーにより良いサービスを提供できます。

以上がPHP Web サイトの異なるページへの管理者とユーザーのログインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。