パスワードフィールドに入力された文字列を設定されたパスワードと照合し、一致していたらログイン後画面に飛ばす
簡単なログイン処理のサンプルソースです。
CookieとSession両方晒しておきます。
phpファイルを二つ用意しますが、便宜的に
- login.php → ログイン画面
- admin.php → ログイン後画面
としています。
先頭行にパスワードを設定する定数がありますが、
ファイル数の多いスクリプトではconfig.phpなどを作ってincludeすることが多いです。
ログイン処理の流れは大体こんな感じです。
- パスワードフィールドに文字列入れて送信
- 送信された文字列が設定されたパスワードと一致するか確認
- 一致していたらクッキー、またはセッションに暗号化したパスワードを保存して次のページへ遷移
- 一致していなかったらエラーメッセージを出す
ログアウト処理について追記しました
Cookie版
login.php
<?php define("PASSWORD", "pass"); if(isset($_POST["action"])&&$_POST["action"]==="login"){//POSTされたactionの値がloginだったら if(PASSWORD=== $_POST["password"]){//パスワード確認 setcookie("TEST", md5(PASSWORD));//暗号化してクッキーに保存 header("Location:admin.php");//admin.phpに飛ばす }else{ setcookie("TEST", "", time() - 3600);//時間を過去に設定してクッキーを削除 message();//エラー表示 } } ?> <?php function message(){ print "パスワードが違います"; } ?> <form action="" method="post"><input name="password" type="text" value="pass" /><input name="action" type="submit" value="login" /></form>
admin.php
<?php define("PASSWORD", "pass"); if(isset($_COOKIE["TEST"]) && $_COOKIE["TEST"] != null && md5(PASSWORD) === $_COOKIE["TEST"]){//クッキーの値がパスワードと一致するか確認 print "Login success"; }else{ print "Login false"; } ?>
セッション版
login.php
<?php define("PASSWORD", "pass"); session_start(); if(isset($_POST["action"])&&$_POST["action"]==="login"){ if(PASSWORD === $_POST["password"]){//パスワード確認 $_SESSION["TEST"] = md5(PASSWORD);//暗号化してセッションに保存 header("Location:admin.php"); }else{ session_destroy();//セッション破棄 message(); } } ?> <?php function message(){ print "パスワードが違います"; } ?> <form action="" method="post"><input name="password" type="text" value="pass" /><input name="action" type="submit" value="login" /></form>
admin.php
<?php define("PASSWORD", "pass"); session_start(); if(isset($_SESSION["TEST"]) && $_SESSION["TEST"] != null && md5(PASSWORD) === $_SESSION["TEST"]){ print "Login success"; }else{ session_destroy();//セッション破棄 print "Login false"; } ?>
うっかりsession_start()抜けてたの修正
setcookie()もsession_start()もブラウザに何か出力を行う前にコールする必要があります。
<?phpの上に空白行があるだけでもエラーになるので要注意。
ハッシュ化する関数はmd5のほかにsha1があります。
ログアウト処理
このサンプルでのログイン条件は、「SessionまたはCookieに保存されている値が暗号化されたパスワードと一致しているか」です。
なのでログアウトしたい場合には、その保存されているSessionやCookieを破棄した上でトップにリダイレクトすればいいということになります。
まずはボタン。nameをlogoutとしときます。(共通)
<form action="" method="post"> <p><button type="submit" name="logout">ログアウト</button></p> </form>
admin.phpに追加する処理。
Cookie版
やる事はログイン失敗時の処理と同じです。
if(isset($_POST['logout'])){ setcookie("TEST", "", time() - 3600); header("Location:index.php"); }
Session版
マニュアルそのままです。
if(isset($_POST['logout'])){ // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } //セッションを破壊してリダイレクト session_destroy(); header("Location:index.php"); }