PHPでのセッションによる認証
私たちの認証は次のように機能するはずです:サイトで認証したいユーザーは、
ページ login.php にアクセスし、正しいログイン名とパスワードを入力し、
その後は認証された状態でサイトのページ間を移動します。
サイトの他のページがユーザーが認証されていることを認識するためには、 セッション内にそのマークを保存する必要があります。
セッションをまだ接続しておらず、サイトの他のページがユーザーが認証されているかどうかを判断できないため、 現在の認証は完全には機能していません。
認証のマークをセッション変数 $_SESSION['auth'] に保存します。
そこに true が記録されていればユーザーは認証されており、
null であれば認証されていません。
私たちのコードに適切な修正を加えましょう:
<?php
session_start();
if (!empty($_POST['password']) and !empty($_POST['login'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$_SESSION['auth'] = true;
} else {
// ログイン名またはパスワードが間違っています
}
}
?>
これで、サイトの任意のページで、ユーザーが認証されているかどうかを 次の方法で確認できるようになりました:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
認証されていないユーザーに対して、あるページのテキスト全体を 完全に閉じることができます:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>認証されたユーザーのみのテキスト</p>
</body>
</html>
<?php else: ?>
<p>認証してください</p>
<?php endif; ?>
ページの一部のみを閉じることもできます:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>すべてのユーザー向けのテキスト</p>
<?php
if (!empty($_SESSION['auth'])) {
echo '認証されたユーザーのみのテキスト';
}
?>
<p>すべてのユーザー向けのテキスト</p>
</body>
</html>
私たちのサイトには、ページ login.php の他に、
1.php、2.php、3.php ページがあるとします。
認証されたユーザーのみがこれらのページにアクセスできるようにしてください。
私たちのサイトに index.php ページもあるとします。
このページの一部はすべてのユーザーに公開され、
一部は認証されたユーザーのみが利用できるようにしてください。
認証に成功した際に、ユーザーのログイン名もセッションに保存されるように コードを修正してください。
サイトのどのページにアクセスしても、認証されたユーザーは自分のログイン名を表示し、 認証されていないユーザーは認証ページへのリンクを表示するようにしてください。