Webサイトの「メンバー」部分で作業しているWebサイトの非常に基本的なユーザーログインインターフェイスを作成しています。情報を格納するために$_SESSION変数に使用しています。['access']は、ユーザーがアクセスを許可されているかどうかに関するブール値を格納します。['invalid']は、ユーザー名/パスワードが一致しない場合はtrue(エラー処理の場合)、['no_attempt']はtrueの場合はtrueです。ユーザーがログインせずに制限されたページにアクセスしようとすると、['uri']はログインせずにアクセスしようとしたページのURIを保存します。
これまでのページのコーディング方法では、['no_attempt']がtrueの場合にエラーメッセージが表示されないことを除いて、すべてが機能します。以下は私のページからの抜粋です。
login.php
session_start();
if(md5($_POST['username']) === '[username hash]' && md5($_POST['password']) === '[password hash]') {
// allow access to members pages
$_SESSION['login']['allow'] = true;
// clear error messages
$_SESSION['login']['invalid'] = false;
$_SESSION['login']['no_attempt'] = false;
// if a url hasn't been stored for redirect, direct to the members home page
if (!isset($_SESSION['login']['redirect']) || empty($_SESSION['login']['redirect'])) $_SESSION['login']['redirect'] = '/members';
header("Location: {$_SESSION['login']['redirect']}");
}
else {
$_SESSION['login']['invalid'] = true;
header('Location: /');
}
制限された各ページの先頭は、次のコードで始まります。
session_start();
if($_SESSION['login']['allow'] != true) {
$_SESSION['login']['redirect'] = $_SERVER['REQUEST_URI'];
$_SESSION['login']['no_attempt'] = true;
header('Location: /');
}
require ('../assets/includes/site-header.php');
site-header.php
このページは、私のWebサイトの各ページの先頭にあります。タイトルやナビゲーションバーなどがあります。以下は、サイドバーのメンバーログイン部分のみです。
if(isset($_SESSION['login']['allow']) && $_SESSION['login']['allow'] == true) {
echo "<li><a href=\"/members\" id=\"members\">Members</a></li>\n";
}
else {
echo "<li>\n";
echo "<div class=\"expandable\">Members <span class=\"show-hide\">+</span></div>\n";
echo "<div class=\"nav-details\">\n";
if (isset($_SESSION['login']['invalid']) && $_SESSION['login']['invalid'] == true) {
echo "<div id=\"login-error\">The username or password you<br />entered was incorrect.</div>\n";
}
elseif (isset($_SESSION['login']['no_attempt']) && $_SESSION['login']['no_attempt'] == true) {
echo "<div id=\"login-error\">You must login before<br />accessing that page.</div>\n";
}
echo "<form method=\"post\" action=\"/members/login.php\" id=\"login-form\">\n";
echo "Username:<br />\n";
echo "<input type=\"text\" name=\"username\" /><br /><br />\n";
echo "Password:<br />\n";
echo "<input type=\"password\" name=\"password\" /><br /><br />\n";
echo "<input type=\"submit\" value=\"Login\" id=\"login-button\" />\n";
echo "</form>\n";
echo "</div>\n";
echo "</li>\n";
}
$_SESSION['login']['invalid'] = false;
$_SESSION['login']['no_attempt'] = false;