ジーニアスブログ – WEB制作会社ジーニアスウェブのお役立ちブログ

PHPとMySQLでできる!セッションを使用した簡単なログイン認証

こんにちは、ジーニアスウェブの高橋です。

5月末に梅雨入りした宮崎。
雨の湿気で蒸し暑くなったり、また逆に少し肌寒くなったりと不安定な気温で、風邪をひかないかヒヤヒヤです。
宮崎の梅雨はとても長いので、今年もお気に入りの傘でテンションを上げて乗り切っていこうと思います!

最近、自作システムを作成しましたが、その中でログイン機能を実装する機会がありましたので、今回はPHPとMySQLを使った簡単なログイン認証を紹介していこうと思います。

会員登録があるサイトを利用した時に、ヘッダーの部分などに

ログイン中:〇〇〇さん

という様な記載がよくあると思います。

それを実装したかったのですが、全てのページにログインした人の情報を渡すってどうしたらいいんだろう…。
どうしよう、と考えている時にこのセッションという存在を知りました。

セッションとは?

簡単にいうと、データを格納する仕組みです。
ページが複数あるWEBシステムでもセッションを使用している間はデータをシステム内でいつでも使える!という便利なもの。

それでは実際にどう実装していくか解説していきます。

書き方

今回の実装したい中身は、
システムのデータベースのinformationsというテーブルに、
①id
②名前
③メールアドレス
④パスワード
の4つのデータが登録してあり、メールアドレスとパスワードの認証が完了すれば、IDと名前のデータをセッション情報として保存する、というものです。

こちらが実際に自作システムで実装したログイン部分の記述です。

セッションの開始はsession_start();の記述から始まります。(2行目)
このsession_start();はphpの記述の一番最初に持ってくる必要があるので、注意が必要です。
3,4行目でデータベースを読み込んでいます。

6~14行目を見ていきます。

1.変数$informationsとして空の配列を定義する。(6行目)

2.ログイン画面で入力したメールアドレスとパスワードをPOSTで受け取る。(7~9行目)

3.テーブル内にメールアドレスとパスワードが一致するユーザーがいる場合、登録しているユーザーの名前とidを取ってくる。(11~14行目)
この時点で、1で定義した変数$informationsは空の配列ではなく、データを持ったものとなります。

4.$informationsが中身を持っている場合、セッション情報としてユーザーの名前とidを保存する。(16~18行目)

5.最後にセッション情報を持っていればTOPページに移動!(22,23行目)

ログイン画面でメールアドレスとパスワードを入力してログインボタンを押すと、上記の手順1~5が進んでいく、という仕組みになります。
メールアドレスとパスワードが一致しなかった場合は手順3の時点でストップしてしまうので、セッション情報もありませんし、TOPページに移動することもありません。

使い方

それでは次に保存されたセッション情報をログイン後のページでどのように扱っていくのかみていきます。

ここもsession_start();から始まります。
4行目からあるif文はユーザーIDのセッション情報がなければ自動的にログアウト画面に移動される、という記述です。

つまり、ログイン画面以外のページ(WEシステムのTOPページなどの中身の部分)のURLを直接入力してシステムを使おうとしても、ログイン画面でログインし、セッション情報を保存していなかったら、そのページを見ることもできない、という仕組みです。

最後8行目は、ユーザーの名前のセッション情報を$login_nameという変数に置き換えています。
これで$login_nameと記述すればユーザーの名前が表示できるようになりました。

2枚目の画像の記述のファイルを作成し、すべてのページにrequire_onceで読み込ませていればどのページでもユーザーの情報が使用できます。

セッションの終了

最後にセッションの終了、ログアウトです。

ここもお馴染み、session_start();。
そのあとセッションの破棄。今回は念のため、セッションの中身も空の配列に上書きしました。
そしてそのあとログイン画面に移動、という流れ。

この記述のファイルをログアウトボタンのaction先に指定しておくことで、ボタンを押したらセッション情報破棄、自動的にログイン画面に移動、とすることができます。

少し長くなってしまいましたが、以上がセッションを使用したログイン認証の実装です。
今回作成した機能ではセキュリティ面は考慮していませんが、また今後の記事でセキュリティのところなども紹介していけたらと思います。

それでは。