サンプル
<?php
$user = "admin";
$password = "pass";
if (!isset($_SERVER["PHP_AUTH_USER"])) {
// クライアントのブラウザ上の認証画面が表示される
header("WWW-Authenticate:Basic realm='PrivatePage'" );
header("HTTP/1.0 401 Unauthorized" );
die("このページを見るには、ログインが必要です" );
} else {
if ($_SERVER["PHP_AUTH_USER"] != $user
|| $_SERVER["PHP_AUTH_PW"] != $password) {
// クライアントのブラウザ上の認証画面が表示される
header("WWW-Authenticate:Basic realm='PrivatePage'" );
header("HTTP/1.0 401 Unauthorized" );
die("このページを見るには、ログインが必要です" );
}
}
?>
<html>
<body>
認証成功
</body>
</html>
?>
補足
isset()
変数がセットされているかどうかをチェック
セッション管理認証
* セッション変数を使って、認証を管理する。
サンプル
login.html
<HTML>
<body>
<form action="authentication.php" method="POST">
ID : <input type="text" size="20" name="id"><br>
パスワード : <input type="password" size="20" name="password"><br>
<input type="submit" value="Login">
<input type="reset" value="Reset">
</form>
</body>
</html>
authentication.php
<?php
try
{
$connectionId = mysql_connect("XXXXX:1000", "dataBaseName", "passowrd") or die(mysql_error());
mysql_select_db('dataBaseName') or die(mysql_error());
// 値を取得する
$email = $_POST["email"];
$password = $_POST["password"];
// 未入力チェック
if ($email == null || $email == "" || $password == null || $password == "")
{
// エラーの場合、error.phpに遷移する
echo "Error...";
exit();
}
// セッション開始
session_start();
// セッション変数の初期化
$_SESSION = array();
// SQL クエリを実行
$sql = "SELECT employeId FROM employe WHERE email='" . $email . "' AND password = '" . $password . "'";
$result = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($result);
if ($count == 1)
{
// 認証成功
$row = mysql_fetch_row($result);
$loginId = $row[0];
// セッション変数の登録
$_SESSION["id"] = $loginId;
// 開放処理(セッションは開放しないこと)
mysql_free_result($result);
mysql_close($connectionId);
// index.phpに遷移
header("LOCATION:index.php");
exit();
}
else if ($count > 1)
{
// ユーザ名が重複している
// 開放処理
session_destroy();
mysql_free_result($result);
mysql_close($connectionId);
echo "Error...";
exit();
}
else
{
// 開放処理
session_destroy();
mysql_free_result($result);
mysql_close($connectionId);
// IDとパスワードがDBで一致しない場合、mismatch.htmlに遷移する
echo "Mismatch...";
exit();
}
}
catch (Exception $e)
{
// 例外処理
echo "Error : " . nl2br($e->getMessage()) . "\n";
exit();
}
?>
<html>
<body>
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_detect_order("ASCII, UTF-8, Shift_JIS, JIS, EUC-JP");
// セッション開始
session_start();
if (!isset($_SESSION["id"]) || $_SESSION["id"] == null || $_SESSION["id"] === "")
{
// 認証されていないため、ログイン画面
header("LOCATION:login.html");
exit();
}
// idを設定する
$id = $_SESSION["id"];
try
{
$connectionId = mysql_connect("XXXXX:1000", "dataBaseName", "passowrd") or die(mysql_error());
mysql_select_db('dataBaseName') or die(mysql_error());
// SQL クエリを実行
$sql = "SELECT name FROM person WHERE id='" . $id . "'";
$result = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($result);
if ($count == 1)
{
// 認証成功
$row = mysql_fetch_row($result);
$name = $row[0];
// 開放処理(セッションは開放しないこと)
mysql_free_result($result);
mysql_close($connectionId);
// IDとパスワードがDBで一致した場合、idの値を持ってmain.phpに遷移する
echo "ようこそ、" . $name . "さん";
exit();
}
else
{
// 開放処理
session_destroy();
mysql_free_result($result);
mysql_close($connectionId);
echo "Error...";
exit();
}
}
catch (Exception $e)
{
echo "Error : " . nl2br($e->getMessage()) . "\n";
}
?>
</body>
</html>