前回までで、会員登録とログインログアウト
が出来るようになりました。
今回は、ログイン中にほかのページに移動しても
ログイン情報を保持する変数について説明します。
セッションを使う
PHPのファイル間を移動してもデータが残る変数として
$_SESSION(セッション)があります。
$_POSTと似ていますけど、使い方は違いますが、
同じスーパーグローバル変数(定義済み変数)です。
まずは、mlogin_check.phpからです。

mlogin_check.php
ファイル名:mlogin_check.php
<記述例>
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$username = htmlspecialchars($username);
$password = htmlspecialchars($password);
$password=md5($password);
try
{
$dsn='mysql:dbname=register;host=localhost';
$user='root';
$dbpassword='';
$dbh=new PDO($dsn,$user,$dbpassword);
$dbh->query('SET NAMES utf8');
$sql='SELECT name FROM member WHERE name=? AND pass=?';
$stmt=$dbh->prepare($sql);
$data[]=$username;
$data[]=$password;
$stmt->execute($data);
$dbh=null;
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false)
{
print 'ログインできません。<br>';
print 'ユーザー名かパスワードが間違っています。<br>';
print '<a href="mlogin.html"> 戻る </a>';
}
else
{
session_start();
$_SESSION['login']=true;
$_SESSION['name']=$rec['name'];
header('Location:top.php');
}
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
前回より追加した分は、37~39行目です。
37行目:session_start();
session_start 関数を使ってセッションをスタートさせます。
既にスタートしていたらそのセッションを再開します。
セッション情報をサーバーから受け取り $_SESSION に
保存されます。
書式例:$_SESSION[‘キー’]=値;
38行目:$_SESSION[‘login’]=true;
ログインチェック完了した後に、
$_SESSION[‘login’]に真(true)を
代入しログインしたことを保存します。
top.php
ファイル名:top.php
<記述例>
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false)
{
print 'ログインされていません。<br />';
print '<a href="mlogin.html">ログイン画面へ</a>';
}
else
{
print $_SESSION['name'];
print ' さんログイン中<br>';
print '<br>';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>トップメニュー</title>
</head>
<body>
<main>
<section style="background: ivory; margin:10px; padding:10px; border:6px solid wheat;box-shadow: 10px 10px 6px -6px gray; display: inline-block;">
<h3>トップメニュー</h3>
<ul style="line-height: 200%; margin:10px 20px 16px 0;">
<li><a href="register.html">会員登録</a></li>
<li><a href="mlogin.html">ログイン</a></li>
<li><a href="mlogout.php">ログアウト</a></li>
</ul>
</section>
</main>
</body>
</html>
前回より追加した分は、1~15行目です。
トップページには、ログイン状態かどうかを確認し 表示させます。
3行目:session_regenerate_id(true);
セキュリティの関係(セッションハイジャック防止) のため、セッションスタートした後に セッションIDを新しく生成したものに 変更する命令をいれます。
mlogout.php
ファイル名:mlogout.php
<記述例>
<?php
session_start();
$_SESSION=array();
if(isset($_COOKIE[session_name()])==true)
{
setcookie(session_name(),'',time()-42000,'/');
}
@session_destroy();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>登録会員ログアウト</title>
</head>
<body>
<main>
<section>
ログアウトしました。<br><br>
<a href="top.php">トップページへ</a>
</section>
</main>
</body>
</html>
前回より追加した分は、1~9行目です。
ログアウトするときには以下のことを行います。
3行目:$_SESSION=array();
セッション変数を空にしています。
6行目:setcookie(session_name(),”,time()-42000,’/’);
セッションIDをクッキーから削除する
8行目:@session_destroy();
セッションを破棄する。
ログインチェックを入れる
<記述例>
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false)
{
print 'ログインされていません。<br />';
print '<a href="mlogin.html">ログイン画面へ</a>';
}
else
{
print $_SESSION['name'];
print ' さんログイン中<br>';
print '<br>';
}
?>
後は、上記ログインチェックのPHPを
他のページの先頭に記述することで
ログイン状態を表示できるようになります。
今回作成したファイルのうちログインチェックを
追加したページは[top.php]のみです。
当然PHP記述なので、HTMLファイルであれば
PHPファイルに変更しなければいけません。
「PHPで会員登録にチャレンジ!」は
なんとか無事終了しました。
これまでのファイルをダウンロードできるように
ZIPファイルにしています。
ファイル名:register.zip
mlogin.html
mlogin_check.php
mlogout.php
register.html
register.zip
register_check.php
register_end.php
top.php
8ファイルあります。以下のリンクからダウンロードできます。
注意していただきたいのは、データベース接続です。
この一連の記事で作成したデータベースと、
XAMPPをインストールした初期値を代入しています。
サーバー上にアップロードして動作確認する場合、
そのサーバーの設定に変更してください。
変更箇所
<記述例>
$dsn='mysql:dbname=register;host=localhost';
$user='root';
$dbpassword='';
ファイル名:mlogin_check.php の13~15行目
ファイル名:register_check.php の23~25行目
ファイル名:register_end.php の22~24行目
ありがとうございました。
コメント