PHPでログイン(認証)処理

前回の記事で独自サービス作りたいと書きましたので、まずはログイン処理から作っていきましょうと。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;
}
  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。