coding tips

posted:2014.06.21update:2014.06.24

[php] ログイン処理

phpを使ってログイン機能を実装する方法を紹介します。

サンプルをダウンロード
from GitHub

セッション変数を用いたログイン機能の実装

ログインの最もポピュラーな実装方法はセッション変数を使う方法です。 ログイン時にセットされるはずのセッション変数がセットされているか否かでログインの有効無効を判定します。

具体的に作ろうとすると次のようなコードになります。

index.phpはログイン画面、active.phpがログイン後の画面です。

index.phpはformからpostされたログインID(loginId)、パスワード(loginPassword)が既定の文字列(user / pass)と一致していればセッション変数にそれらを代入して、active.phpへリダイレクトする仕掛けです。

<?php
session_start();
$message = '';

if (isset($_POST['loginId']) && isset($_POST['loginPassword']))
{
  //ログイン処理
  if ($_POST['loginId'] === 'user' && $_POST['loginPassword'] === 'pass')
  {
    $_SESSION['loginId'] = $_POST['loginId'];
    $_SESSION['loginPassword'] = $_POST['loginPassword'];
    header("Location: active.php");
  }
  else {
    $message = 'ID、パスワードが不正です';
  }
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>ログインサンプル</title>
</head>
<body>
<form method="post" action="index.php">
  <input type="text" name="loginId">
  <input type="password" name="loginPassword">
  <input type="submit" value="ログイン">
  <div><?php echo $message; ?></div>
</form>
</body>
</html>

ログイン後の画面についてはactive.phpのように、まずログイン時にセットされているはずの変数loginIdを確認します。 変数がセットされていなければログイン画面へリダイレクトします。

ログアウトする場合はsession_destroyを用いてセッションを破棄します。 これでセットされていたセッション変数が無効となります。

<?php
session_start();

//ログインチェック
if (!isset($_SESSION['loginId']))
{
  header("Location: index.php");
}

//ログアウト処理
if (isset($_POST['logout']))
{
  session_destroy();
  header("Location: index.php");
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>ログインサンプル</title>
</head>
<body>
ログインされました
<form method="post" action="active.php">
  <input type="submit" name="logout" value="ログアウト">
</form>
</body>
</html>

以上の方法はログイン処理をできるだけ少ない記述で実現する方法です。

実際にはセキュリティーを考慮してソルトを使うなど、様々な仕掛けを組み合わせて実装します。

動作確認環境