15.PHPでユーザ認証してみる。 1)ユーザ認証の仕組み(フローチャート)
ユーザ認証は、ホームページを開くときにユーザ名とパスワードを入力するためのダイアログボックスが 開くベーシック認証とホームページ上にユーザ名とパスワードを入力する場所が存在する場合がある。
前者は、セキュリティがあまりよくないため重要なページにアクセスさせる場合は使わないように した方がよい。
後者は、ユーザ情報がデータベース化されておりデータベースを参照して認証を行う方法で
データベース認証と呼ばれることがある。当然、ユーザ名とパスワードはクリアテキストで送信されるため
セキュリティ上問題があります。通常は、SSLによるセキュリティ強化が図られている。 <ユーザ認証のフローチャート>
ユーザ名とパスワードを入力するフォームを作ります。 | |||
データベースに入っているユーザ情報と一致しているかを調べて |
|||
認証できた場合は、認証後の処理を行います。 認証できなかった場合は、ユーザIDとパスワードを再入力させるフォームを表示させます。 |
2)ユーザ認証で使っている関数(mysql_num_rows())の書式 mysql_num_rows(リンクID) mysqli_num_rows(リンクID) ・戻り値 ・・・ MySQLでクエリーした時のリソースの行(レコード)数を返します。 MySQLのクエリでSELECT文が実行された時は、抽出された行(レコード)の数を返されます。 抽出されたレコード数が0の場合は、ユーザ名とパスワードが一致しなかったことになります。 抽出されたレコード数が一つ以上あれば、ユーザ名とパスワードが一致したことになります。 レコード数が2以上存在するということは、同じユーザ名とパスワードを持つユーザが2名以上 存在することになります。このような登録ができないように次のユーザ登録のところで行います。 3)ユーザ認証のための認証データ入力ページ(ファイル名:userNin.htm)<!doctype html>4)ユーザ認証を行うページ(ファイル名:userNin.php)
<html>
<head>
<meta charset="utf-8"> <title>ユーザ認証</title> </head> <body> ユーザ認証<br> <form action="userNin.php" method="post" name="form1"> ユーザ名: <input name="fUserName" type="text" id="fUserName"> <br> パスワード: <input name="fPassWd" type="password" id="fPassWd"> <input type="submit" name="Submit" value="認証"> <input type="reset" name="Submit2" value="クリア"> </form> </body> </html>
<!doctype html><課題> 認証に失敗した場合次のように再入力できるように2)のプログラムを変更しなさい。 (以下のように表示させなさい。) ユーザ名かパスワードが間違っています。もう一度入力しなおしてください。 (← 赤色で表示させる。)
<html>
<head>
<meta charset="utf-8">
<title>ユーザ認証</title>
</head>
<body>
<?php
$conn=mysqli_connect('localhost','root','******') or exit("MySQLへ接続できません。");
echo "MySQLへ接続できました。<br>";
mysqli_select_db($conn,'userid_db') or exit("データベース名が間違っています。");
$sql="SELECT * FROM userid_tbl where userName='{$_POST['fUserName']}' and passWd='{$_POST['fPassWd']}';";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。"); //mysqli_num_rows($MySQL['result'])は、SELECT文で抽出されたレコードの数を返す関数です。
//抽出されたレコード数が0の場合は、ユーザ名とパスワードが一致しなかったことになります。
//抽出されたレコード数が一つ以上あれば、ユーザ名とパスワードが一致したことになります。
//コード数が2以上存在するということは、同じユーザ名とパスワードを持つユーザが2名以上
//存在することになります。
//このような登録ができないように次のユーザ登録のところで行います。
if(mysqli_num_rows($result)!=0){
echo "ユーザ認証できました。{$_POST['fUserName']}様のページです。<br>";
}
else{
echo "ユーザ認証に失敗しました。もう一度入力しなおしてください。";
}
mysqli_close($conn);
?>
</body>
</html>