ホームページ > バックエンド開発 > PHPの問題 > PHP でユーザーのログイン動作を確認する方法

PHP でユーザーのログイン動作を確認する方法

PHPz
リリース: 2023-03-31 09:53:37
オリジナル
1286 人が閲覧しました

Web サイト開発において、ログインは不可欠な機能です。この記事では、PHPでユーザーのログイン動作を確認する方法を紹介します。

1. ユーザー ログインの確認の基本概念
1.1 ユーザー ID 認証
ユーザー ID 認証とは、一般に、ユーザーが入力したユーザー名とパスワードがシステムに保存されているデータと一致するかどうかを確認することを指します。ユーザーが入力したユーザー名とパスワードは通常、ユーザー名が空かどうか、長さが要件を満たしているかどうかなど、クライアント (ブラウザー) でいくつかの基本的なチェックを必要とします。

1.2 セッション制御
セッション制御とは、ユーザーがログインに成功した後、Web サイトのさまざまなページにアクセスするときに、ログイン状態を維持できるようにするためのいくつかのメカニズムを使用することを指します。 PHP では、セッション テクノロジを通じてセッション制御を実現できます。

2. PHP でユーザー ログインをチェックするためのコード実装
PHP でユーザー ログインをチェックするためのコード実装は、通常はユーザー ログイン ページで、ユーザーが入力したユーザー名とパスワードを受け入れ、その正当性をチェックします。背景に。簡単な例を次に示します。

index.php (ログイン ページ)

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>用户登录</title>  
</head>  
<body>  
<form action="login.php" method="post">  
<label>用户名:</label><input type="text" name="username" required><br>  
<label>密码:</label><input type="password" name="password" required><br>  
<input type="submit" value="登录">  
</form>  
</body>  
</html>
ログイン後にコピー

login.php (ログイン チェック ページ)

<?php  
session_start();    // 启用 session  
$username = $_POST[&#39;username&#39;];    // 获取用户输入的用户名  
$password = $_POST[&#39;password&#39;];    // 获取用户输入的密码  

if ($username == &#39;admin&#39; && $password == &#39;123456&#39;) {    // 假设 admin 为合法用户,密码为 123456  
    $_SESSION[&#39;username&#39;] = $username;    // 存储用户名到 session 中  
    header(&#39;Location: welcome.php&#39;);    // 跳转到欢迎页面  
} else {  
    echo "用户名或密码错误,请重新登录。";  
}  
?>
ログイン後にコピー

welcome.php (ウェルカム ページ)

<?php  
session_start();    // 启用 session  
if (isset($_SESSION[&#39;username&#39;])) {    // 判断是否已登录  
    echo "欢迎" . $_SESSION[&#39;username&#39;] . "登录成功!";  
} else {  
    header(&#39;Location: index.php&#39;);    // 如果未登录,跳转回登录页面  
}  
?>
ログイン後にコピー

上記の例では、ユーザーがログイン ページでユーザー名とパスワードを入力し、フォームを login.php ページに送信すると、このページで検証が実行されます。ユーザー名とパスワードが正しい場合は、セッションに保存され、ようこそページ welcome.php にジャンプします。ようこそページでは、ユーザーがすでにログインしているかどうかがチェックされます。ログインしている場合は、ウェルカム メッセージが表示されます。そうでない場合、ユーザーはログイン ページにリダイレクトされます。

3. PHP チェック ログイン テクニック
3.1 パスワードの保護
ユーザー パスワードを漏洩から保護するには、通常、パスワードを暗号化して保存する必要があります。 PHP では、md5() 関数または sha1() 関数を使用してパスワードを暗号化できます。例:

$password = md5($_POST['password']);    // 将密码用 md5() 函数加密后存储
ログイン後にコピー

3.2 CSRF 攻撃の防止
CSRF (クロスサイト リクエスト フォージェリ) 攻撃とは、攻撃者がユーザーになりすまして、ユーザー リクエストを偽造してサーバーにリクエストを送信することを意味します。一般に、CSRF 攻撃を防ぐには、ランダムに生成されたトークンをフォームに追加し、その有効性をバックグラウンドでチェックします。例:

index.php (ログイン ページ)

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>用户登录</title>  
</head>  
<body>  
<form action="login.php" method="post">  
<input type="hidden" name="token" value="<?php echo uniqid(); ?>">     <!-- 添加随机 token -->
<label>用户名:</label><input type="text" name="username" required><br>  
<label>密码:</label><input type="password" name="password" required><br>  
<input type="submit" value="登录">  
</form>  
</body>  
</html>
ログイン後にコピー

login.php (ログイン チェック ページ)

<?php  
session_start();    // 启用 session  
$username = $_POST[&#39;username&#39;];    // 获取用户输入的用户名  
$password = $_POST[&#39;password&#39;];    // 获取用户输入的密码  

if ($_POST[&#39;token&#39;] !== $_SESSION[&#39;token&#39;]) {    // 检查 token 是否合法  
    echo "非法请求!";  
} elseif ($username == &#39;admin&#39; && $password == &#39;123456&#39;) {    // 假设 admin 为合法用户,密码为 123456  
    $_SESSION[&#39;username&#39;] = $username;    // 存储用户名到 session 中  
    header(&#39;Location: welcome.php&#39;);    // 跳转到欢迎页面  
} else {  
    echo "用户名或密码错误,请重新登录。";  
}  
?>
ログイン後にコピー

3.3 XSS 攻撃の防止
XSS (クロスサイト)スクリプティング ) 攻撃とは、攻撃者が特定の悪意のあるコードを挿入することによってユーザー情報を盗んだり、特定の損害を達成したりすることを指します。 XSS 攻撃を防ぐために、htmlspecialchars() 関数を使用してユーザー入力を処理できます。例:

$username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');    // 对用户名进行处理
ログイン後にコピー

4. 概要
この記事では、PHP でユーザー ログインをチェックする基本概念とコード実装、および CSRF および XSS 攻撃を防ぐためのいくつかのテクニックを紹介します。実際の開発プロセスでは、特定の状況に応じて対応する調整や最適化を行う必要があります。

以上がPHP でユーザーのログイン動作を確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート