6-13 PHPでログイン処理の基本を作ってみよう

Web開発学習ロードマップ

ここまでで、
PHP基礎として必要な要素を一通り学びました。

・フォーム送信
・バリデーション
・XSS対策
・CSRF対策
・セッション管理

これらを個別に見ると難しく感じますが、
ログイン処理 という形でまとめると、
Webアプリケーションの全体像が一気に見えてきます。

この記事では、
学習用としてシンプルなログイン処理 を実装しながら、
「これまで学んだ知識がどうつながるか」を整理します。


この記事で学べること

・ログイン処理の全体構造
・フォームから認証までの流れ
・セッションを使ったログイン管理
・実務に近い考え方


ログイン処理の全体像

まずは、
ログイン処理の流れを整理します。

  1. ログインフォームを表示

  2. ユーザーがID・パスワードを入力

  3. PHPで入力内容を受け取る

  4. 入力チェックを行う

  5. 認証に成功したらセッションに保存

  6. ログイン後ページを表示

今回は、
データベースは使わず
仕組みの理解に集中します。


ログインフォームを作成する

サンプルコード①:ログインフォーム

<form method="post" action="login.php">
   <label>
    ユーザー名:
    <input type="text" name="username">
  </label>
  <br>
  <label>
    パスワード:
    <input type="password" name="password">
  </label>
  <br>
  <button type="submit">ログイン</button>
</form>

ポイント

・name 属性が PHP 側と対応
・password は type=”password” を使用
・action で送信先を指定


ログイン処理(PHP側)

次に、
フォーム送信を受け取る PHP を作成します。

サンプルコード②:ログイン処理の基本

<?php
session_start();

$errors = [];

$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';

if ($username === '') {
  $errors[] = 'ユーザー名を入力してください';
}

if ($password === '') {
  $errors[] = 'パスワードを入力してください';
}

if (empty($errors)) {
  if ($username === 'admin' && $password === 'password') {
    $_SESSION['is_login'] = true;
    $_SESSION['username'] = $username;
    echo 'ログイン成功';
  } else {
    echo 'ユーザー名またはパスワードが違います';
  }
} else {
  foreach ($errors as $error) {
    echo $error . '<br>';
  }
}

コードの流れを整理する

このコードでは、
次のことを行っています。

・フォームデータを受け取る
・未入力チェックを行う
・認証情報を確認する
・成功したらセッションに保存

これまで学んだ内容が
すべて含まれている
点に注目してください。


セッションに保存する意味

ログイン成功時に、

$_SESSION['is_login'] = true;

を保存することで、

・このユーザーはログイン済み
という状態を
ページをまたいで保持
できるようになります。


ログイン後ページの例

ログイン後に表示するページでは、
次のようにチェックします。

サンプルコード③:ログイン判定

<?php
session_start();

if (empty($_SESSION['is_login'])) {
  echo 'ログインしてください';
  exit;
}

echo 'ようこそ、' . htmlspecialchars($_SESSION['username'], ENT_QUOTES, 'UTF-8') . 'さん';

ポイント

・ログインしていなければ処理を止める
・表示時は XSS 対策を行う

ログイン判定は、
すべての保護ページで必須
です。


ログアウト処理の例

サンプルコード④:ログアウト

<?php
session_start();

$_SESSION = [];
session_destroy();

echo 'ログアウトしました';

このログイン処理は「学習用」

重要な注意点です。

今回の例は、

・パスワードを平文で比較
・データベース未使用

という
学習用の簡易実装 です。

実務では、

・パスワードのハッシュ化
・データベース連携

が必須になります。


それでもこの実装が重要な理由

このログイン処理を理解できると、

・Webアプリの全体像が見える
・フレームワークの仕組みが分かる
・次の学習につながる

という大きな意味があります。

「なぜ Laravel がこうなっているのか」
が、後で必ず理解できます。


初心者がよくつまずくポイント

ログイン処理で多いミスです。

・session_start の書き忘れ
・ログイン判定をしていない
・XSS対策を忘れる

「ログインできた=完成」
ではない点に注意しましょう。


まとめ

PHPでのログイン処理は、

・フォーム
・バリデーション
・セッション
・条件分岐

これらを組み合わせた
集大成的な処理 です。

ここまで実装できれば、
PHP基礎としては
十分に実務の入口に立っています。


次に読むべき記事

▶ 次の記事
6-14 PHP基礎のまとめと次のステップ

▶ 関連記事
6-12 PHPでセッションを使って状態を管理する

コメント