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;
}

MW WP Form

MW WP Form はショートコードベースのフォームプラグインです。多くの機能を持っており、例えば、多くのバリデーションルール、問い合わせデータの保存、そしてグラフ機能集計などを使用することができます。

さらに詳しく
Habakiri

Habakiri

Bootstrap ベースのシンプルな WordPress テーマ。レスポンシブ、多くのカスタマイズ機能。圧縮された CSS・JS を使用する高速化対策。Microformats 対応。Sass、クラスベースの functions.php。

さらに詳しく
basis-stylus

Basis

軽量なレスポンシブ Stylus/CSS フレームワーク。Flexbox ベースのグリッドシステム、疎結合なコンポーネント、バーティカルリズム。

さらに詳しく