MySQLとsession()を使ったログイン機能の基本【PHP MySQL】

ログイン画面【staff_login.php】

<form method="post" action="staff_login_check.php">
スタッフコード<br />
<input type="text" name="code" ><br />
パスワード<br />
<input type="password" name="pass"><br />
<br />
<input type="submit" value="ログイン">
</form>

正しいいログインかどうかチェックするファイル【staff_login_check.php】

<?php

try
{

$staff_code=$_POST['code'];
$staff_pass=$_POST['pass'];

$staff_code=htmlspecialchars($staff_code,ENT_QUOTES,'UTF-8');
$staff_pass=htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8');

$staff_pass=md5($staff_pass);//パスワードはDBにもmd5の状態で格納されているため

$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//入力情報とDBの情報を照会
$sql='SELECT name FROM {テーブル名} WHERE code=? AND password=?';
$stmt=$dbh->prepare($sql);
$data[]=$staff_code;
$data[]=$staff_pass;
$stmt->execute($data);

$dbh=null;

$rec=$stmt->fetch(PDO::FETCH_ASSOC);

if($rec==false)
{
	print 'スタッフコードかパスワードが間違っています。<br />';
	print '<a href="staff_login.html"> 戻る</a>';
}
else
{
	session_start();
	$_SESSION['login']=1;
	$_SESSION['staff_code']=$staff_code;
	$_SESSION['staff_name']=$rec['name'];
	header('Location:staff_top.php');
	exit();
}

}
catch(Exception $e)
{
	print 'ただいま障害により大変ご迷惑をお掛けしております。';
	exit();
}

?>

ログインしないとは入れないページ全般の最初の行に書くコード

<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false)
{
	print 'ログインされていません。<br />';
	print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
	exit();
}
else
{
	print $_SESSION['staff_name'];
	print 'さんログイン中<br />';
	print '<br />';
}
?>

ログアウトリンク

<a href="staff_logout.php">ログアウト</a>

ログアウト処理

<?php
session_start();
$_SESSION=array();  //セッション変数を空に
//cookieにセッションIDがあれば削除
if(isset($_COOKIE[session_name()])==true)
{
	setcookie(session_name(),'',time()-42000,'/');
}
session_destroy();  //セッションを破棄
?>

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です