前回の記事で独自サービス作りたいと書きましたので、まずはログイン処理から作っていきましょうと。URLはhttp://mini.2inc.org/users/。
とりえあず、書いたスクリプトはこんな感じ。
<?php
require('../common/define.php');
require('../common/function.php');
require('../Connections/DB.php');
//セッションの開始(セッション名:memolog)
session_name('memolog');
session_start();
//$_SESSION['login']がtrueだったら自動ログイン
//あとでチェックした人のみ方式を実装
if(isset($_SESSION['login']) && $_SESSION['login']=="true"){
session_regenerate_id();
$_SESSION['login']="true";
header("location:login.php");
}
//postされたときに実行
if($_SERVER['REQUEST_METHOD'] == "POST"){
//nameとpwdがmini_usersに格納されているかチェック
$sql="
SELECT name FROM mini_users
WHERE
name='".myesc($_POST['name'])."' AND
pwd='".sha1(myesc($_POST['pwd']))."'
";
$rs = mysql_query($sql,$DB) or die(mysql_error());
$flg = mysql_num_rows($rs);
//存在したら
if(isset($flg) && $flg!=""){
//IPとログイン時間を記憶
$sql="
UPDATE mini_users
SET
last_ip='".myesc($_SERVER['REMOTE_ADDR'])."',
last_login='".myesc(date('Y-m-d H:i:s'))."'
";
$rs = mysql_query($sql,$DB) or die(mysql_error());
//セッションIDを変更
session_regenerate_id();
//$_SESSION['login']をtrueに
$_SESSION['login']="true";
//login.phpに飛ばす
header("location:login.php");
}
}
?>
セッションIDを変更するsession_regenerate_id()関数は変更前のセッションIDを残してしまうらしい。PHP5.1以降なら引数にtrueを指定することで変更前のセッションIDを削除可能ですが、それ以前だと自前スクリプトで削除しないとだめらしい。とりえあずそのスクリプトの書き方がわからんので…放置。
ほんとはcookieとか使ってログインの状態を保持するんだろうけど、その場合だと$_SESSION[‘login’]とかを持たせてたら良いんかな?
まだログアウトがないからテストするのが不便ですね。てかlogin.phpに直アクセスされたら普通に見れちゃう状態なのでその辺の処理も必要だなー。
ちなみに
スクリプト中の「myesc」はこんな感じ。
function myesc($str){
$str=eregi_replace("\t","",$str);
$str=eregi_replace("<br>","<br />",$str);
$str=eregi_replace("<br />","",$str);
$str=mysql_real_escape_string($str);
return $str;
}