【コピペで使える】ログイン機能の簡単実装サンプル(PHP/MySQL)
ログイン機能とは
ログイン機能は、ID・メールアドレスとパスワードによってユーザーを特定し、そのユーザーに個別のページを見せる機能です。
会員制サイトでは絶対に必要になる機能ですね。
CakePHPなどのフレームワークではすでに標準的に機能がついているものもあると思いますが、スクラッチで開発しようとするときに、なかなかベースとなるコードが見つからないなどの場合もあると思います。
今回は、LAMP環境のウェブアプリケーションのスクラッチでの開発において、ベースとなるログイン機能の実装サンプルということで、できるだけ簡略化したものを紹介してみたいと思います。
【DL版】PHP・MySQLで作ったログイン機能サンプル一式 - tadworks - BOOTH
PHPとMySQLを使ったミニマルなログインアプリケーションサンプル(スクラッチ開発)。自由に改良して手軽に会員向けアプリケーションを作成いただけます。
※BOOTHはピクシブ株式会社が運営するクリエイターのマーケットプレイスです。
主なプログラム構成と動作
主な構成要素は以下です。
- ・データベース(accountsテーブル)
- ・ログイン画面(login.php)
- ・ログイン認証ファイル(auth.php)
- ・データベースアクセスファイル(database.php)
ログイン画面で、メールアドレスとパスワードで認証して、成功すれば「ログインしました」と表示し終了、失敗したらエラー表示の上、再度ログインフォームを表示する動作を目指したいと思います。
データベース(accountsテーブル)
・id・・・int型
・email・・・text型
・password・・・varchar型
必要最低限のカラム構成にしていますが、実際に実装するときには、アクセストークンを追加して、ウェブブラウザ側のセッションとデータベースのトークンの整合性をチェックするなどのセキュリティ対策は必要になるかもしれません。
ログイン画面(login.php)
<?php
session_start();
require_once('./database.php'); // データベースアクセスファイル読み込み
require_once('./auth.php'); // ログイン認証ファイル読み込み
$errorMessage = ""; // エラーメッセージ初期化
// ログイン処理
if ($_POST['mode']=="login") {
if(!empty($_POST['form']['email']) && !empty($_POST['form']['password'])){
if ($account=login($_POST['form']['email'], $_POST['form']['password'])){
$_SESSION['account'] = $account;
header("Location: ./login.php");
// ログイン失敗時の表示
} else {
$errorMessage = "ログインに失敗しました。";
}
} else {
$errorMessage = "メールアドレスとパスワードを入力してください。";
}
}
?>
<?php if($login){ ?>
echo "ログインしました。";
<?php } else { ?>
<?php echo $errorMessage; ?>
<input type="text" name="form[email]" value="" placeholder="メールアドレスを入力して下さい。">
<input type="password" name="form[password]" value="" placeholder="パスワードを入力して下さい。">
<input type="hidden" name="mode" value="login">
<input type="submit" name="login" value="ログイン">
<?php } ?>
実際に利用する際には、ログイン済の場合はトップページやマイページにリダイレクトするなりして使用するとよいかと思います。
汎用性を考慮して、デザイン性を一切排除したシンプルなコーディングにしています。
ログアウト画面(logout.php)
<?php
session_start();
$_SESSION = array();
session_destroy();
echo "ログアウトしました。";
?>
ログアウトの処理は簡単でログイン判定を行うためのセッション情報をすべて破棄するのみです。
その後はauth.phpによるログイン認証に通らなくなるためすべてのページでログアウト用の表示がされることになります。
ログイン認証ファイル(auth.php)
<?php
session_start();
// セッションにアカウント情報がある場合
if(isset($_SESSION['account'])){
// 認証処理
$account = authCheck($_SESSION['account']['email'], $_SESSION['account']['password']);
if(isset($account)){
// ログインフラグをtrueにする
$login = true;
// セッションにユーザー情報を格納
$_SESSION['account'] = $account;
} else {
// ログインフラグをfalseにする
$login = false;
// セッションを破棄
unset($_SESSION['account']);
}
// セッションにアカウント情報がない場合
} else {
// ログインフラグをfalseにする
$login = false;
}
?>
このファイルは、会員向けページのすべてで最初に読み込んで表示を切り分けるようにします。
データベースアクセスファイル(database.php)
<?php
// ログイン処理
function login($email, $password){
$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
$db->query('SET NAMES utf8');
$sql = "SELECT * FROM accounts WHERE email = :email AND password = :password";
$stt = $db->prepare($sql);
$stt->bindParam(':email', $email);
$stt->bindParam(':password', $password);
$stt->execute();
while($row=$stt->fetch()){
$result['id'] = $row['id'];
$result['name'] = $row['name'];
$result['email'] = $row['email'];
$result['password'] = $row['password'];
}
if(isset($result)){
return $result;
}
}
// ログイン認証
function authCheck($email, $password){
$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
$db->query('SET NAMES utf8');
$sql = "SELECT * FROM accounts WHERE email = :email AND password = :password ";
$stt = $db->prepare($sql);
$stt->bindParam(':email', $email);
$stt->bindParam(':password', $password);
$stt->execute();
while($row=$stt->fetch()){
$result['id'] = $row['id'];
$result['name'] = $row['name'];
$result['email'] = $row['email'];
$result['password'] = $row['password'];
}
if(isset($result)){
return $result;
}
}
?>
ログインタス|後付けログイン機能でカンタン会員サイト構築!
ログインタスは運営中のHTMLサイトに後付けで会員機能を追加できるシステムです。改変も可能!ライセンス購入すれば自社サーバーで永続的に運用いただけます。
メールアドレス、パスワードの入力より前に進みません。