PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本
生徒
「ウェブサイトにログイン機能をつけたいんですが、PHPでどうやって作ればいいですか?」
先生
「PHPでは、ログイン機能を作るのはそれほど難しくありませんよ。基本的には、ユーザー名やパスワードを入力して、それを確認し、正しければログイン状態にします。」
生徒
「パスワードってどこで確認するんですか?データベースとか必要ですか?」
先生
「そうですね、通常はデータベースに登録されたユーザー情報を使います。では、PHPでのログイン・ログアウトの仕組みを丁寧に解説していきましょう!」
1. PHPでのログイン・ログアウト機能の仕組みとは?
PHP(ピー・エイチ・ピー)は、Webページを動的に作るためのプログラミング言語です。PHPでログイン機能を作るときは、「セッション」という仕組みを使います。セッションとは、ユーザーがログインしたかどうかの状態をサーバー側で一時的に覚えておく仕組みです。
たとえば、スーパーのレジで「会員カードを出す」と、あなたが誰かをお店が覚えてくれるイメージです。この「覚えておく」のがセッションです。
2. ログイン処理の流れを理解しよう
ログインの基本的な流れは次の通りです。
- ① ユーザーがログインフォームにユーザー名とパスワードを入力する
- ② PHPがその情報を受け取り、データベースの情報と一致するかを確認する
- ③ 一致すればセッションを使ってログイン状態にする
- ④ ログイン中のユーザーだけが見られるページへリダイレクト(移動)させる
これだけ見ると難しそうに思えますが、一つずつコードで見ていくと理解しやすくなります。
3. PHPでログインフォームを作ろう
まずは、ユーザー名とパスワードを入力するフォームを作ります。以下は簡単なHTMLコードの例です。
<form action="login.php" method="post">
<label>ユーザー名: <input type="text" name="username"></label><br>
<label>パスワード: <input type="password" name="password"></label><br>
<input type="submit" value="ログイン">
</form>
このフォームは、「login.php」というファイルに情報を送信します。
4. login.phpで認証処理をしよう
フォームから送られてきたユーザー名とパスワードを確認する処理をします。今回は、簡単な例としてデータベースを使わず、あらかじめ決めたユーザー名とパスワードで確認します。
<?php
session_start();
$valid_user = 'taro';
$valid_pass = 'pass123';
if ($_POST['username'] === $valid_user && $_POST['password'] === $valid_pass) {
$_SESSION['user'] = $_POST['username'];
header('Location: mypage.php');
exit;
} else {
echo 'ユーザー名またはパスワードが間違っています。';
}
?>
このコードでは、session_start()を使ってセッションを開始し、ログインが成功すればセッションにユーザー名を保存しています。
5. ログイン後のページを表示しよう(mypage.php)
ログインしている人だけが見られるページを作ります。
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('Location: loginform.html');
exit;
}
echo "ようこそ、" . $_SESSION['user'] . "さん!";
?>
セッションにユーザー名があればログイン中と判断し、表示を続けます。なければログインフォームへ戻します。
6. ログアウト処理を追加しよう
ログアウトの処理もシンプルです。セッションの情報を削除して、ログイン前の状態に戻します。
<?php
session_start();
session_unset();
session_destroy();
header('Location: loginform.html');
exit;
?>
このコードをlogout.phpというファイルにして、リンクから呼び出せるようにします。
<a href="logout.php">ログアウトする</a>
7. 実際にデータベースを使うには?
現実的には、ユーザー情報はデータベース(MySQLなど)に保存されています。以下のような手順で処理を行います:
- ① データベースに接続する
- ② 入力されたユーザー名をもとに、パスワードを取り出す
- ③ パスワードを比較する(ハッシュ化されたもの)
このように、データベースを使えば多くのユーザーを管理できます。パスワードはpassword_hashやpassword_verify関数で安全に扱います。
8. ログイン状態をページ全体で使うには?
ログイン後のページすべてで共通してセッションチェックをしたいときは、「共通ファイル」を作って、全ページで読み込むようにします。
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('Location: loginform.html');
exit;
}
?>
このコードをauth.phpなどにして、各ページの先頭でrequire 'auth.php';と書くことで共通化できます。