PHPで会員登録にチャレンジ!【7.ログイン情報保持】

PHP

前回までで、会員登録とログインログアウト
が出来るようになりました。

今回は、ログイン中にほかのページに移動しても
ログイン情報を保持する変数について説明します。

セッションを使う

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行目

ありがとうございました。

コメント

タイトルとURLをコピーしました