①ファイルの作成
/var/www/html/
index.php :インデックス画面
logio.php :ログイン・ログアウトの制御
conf.php :DB接続情報管理用
input.php :ログイン成功後の遷移先画面
②index.php
<html>
<head>
<title>ログイン ページ</title>
</head>
<body>
<script type="text/javascript">
<!--
function onKeyDown(e){
// Enterキー入力
if(e.keyCode == 13){
login();
}
}
// ログイン処理
function login(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
if(xhr.responseText == "1"){
document.location.href = "input.php";
}else if(xhr.responseText == "0"){
document.getElementById("msg").innerHTML = "ユーザIDまたはパスワードが間違っています。";
document.getElementById("pwd").focus();
}else{
document.getElementById("msg").innerHTML = xhr.responseText;
}
}
}
xhr.open("POST", "logio.php");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8;");
var req = "mode=login";
req += "&uid=" + encodeURI(document.getElementById("uid").value);
req += "&pwd=" + encodeURI(document.getElementById("pwd").value);
xhr.send(req);
}
//-->
</script>
<div id="msg"></div>
<table border=3>
<tr>
<td>ユーザID</td>
<td><input type="text" style="width:150px;" id="uid" onkeydown="onKeyDown(event);"></td>
</tr>
<tr>
<td>パスワード</td>
<td><input type="password" style="width:150px;" id="pwd" onkeydown="onKeyDown(event);"></td>
</tr>
<tr>
<td></td>
<td><input type="button" style="width:150px;" value="ログイン!" onclick="login();"></td>
</tr>
</table>
</body>
</html>
③logio.php
※SQL文を発行する場合は、mysqli::prepare("SQL文");を使用してSQLパラメータをバインドすれば、自動で文字列をエスケープしてくれるので、そちらの方が楽で安全かもしれないです。
<?php
$mode = $_POST["mode"];
$ret = "";
switch($mode){
case "login":
$ret = login($_POST["uid"], $_POST["pwd"]);
break;
case "logout":
logout();
break;
default:
break;
}
echo $ret;
// ログイン処理
function login($uid, $pwd){
session_start();
$ret = "";
// 外部ファイルの読み込み
require("conf.php");
// 外部ファイルのメソッドを実行
$mysqli = GetMySqli();
if($mysqli == null){
exit();
}
// ユーザ情報取得
$sql = "SELECT username ";
$sql .= "FROM auth ";
$sql .= "WHERE uid='".$mysqli->real_escape_string($uid)."' ";
$sql .= "AND pwd=HEX(AES_ENCRYPT('".$mysqli->real_escape_string($pwd)."','encryptKey'))";
// SQL実行
if($result = $mysqli->query($sql)){
// 取得レコードをフェッチ
if($row = $result->fetch_row()){
$_SESSION["username"] = $row[0];
$ret = "1";
}else{
$ret = "0";
}
}else{
// SQL実行エラー
$ret = "Error executing sql:".$mysqli->error;
}
$mysqli->close();
return $ret;
}
// ログアウト処理
function logout(){
session_start();
// セッションをクリア
$_SESSION = array();
// クッキーを破棄
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), "", time()-42000, "/");
}
// セッションを破棄
session_destroy();
}
?>
④conf.php
<?php
function GetMySqli(){
// ホスト名
$host = "localhost";
// ユーザID
$uid = "root";
// パスワード
$pwd = "password";
// DB名
$db = "test_db";
$mysqli = new mysqli($host, $uid, $pwd, $db);
// 接続状況チェック
if($mysqli->connect_errno){
echo "Connection Error:".$mysqli->connect_error;
return null;
}
// 文字セット変更
if(!$mysqli->set_charset("utf8")){
echo "Error loading character set utf8:".$mysqli->error;
return null;
}
return $mysqli;
}
?>
④input.php
<?php
session_start();
// セッションが確立されているか判断
if(!isset($_SESSION["username"])){
require("index.php");
exit();
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登録 ページ</title>
</head>
<body>
<script type="text/javascript">
<!--
function logout(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
document.location.href = "/";
}
}
xhr.open("POST", "logio.php");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8;");
var req = "mode=logout";
xhr.send(req);
}
//-->
</script>
<table border=3>
<tr>
<td>
ようこそ
<b>
<?php
echo $_SESSION["username"];
?>
</b>
さん
</td>
<td>
<input type="button" value="ログアウト" onclick="logout();">
</td>
</tr>
<tr>
<td colspan=2>
<div id='list'>
WOW
</div>
</td>
</tr>
</table>
</body>
</html>
最終更新:2012年07月12日 00:14