PHP

【PHP】ログイン処理を作成する方法。サンプルコード有

Webアプリ、Webサービスを作成する時に必須なのが、ログイン処理。

今回はそのログイン処理をサンプルコードも交えて紹介します。

ログインにはセッション情報を使用する

ログイン処理にはセッション情報を使用します。

セッション情報はクッキーと混同される場合が多いですが、セッション情報はサーバー側にクッキーはクライアント側に保存されます。

そのため、一般的にクッキーよりセッションのほうがセキュリティが高いとは言われていますが、「セッションハイジャック」という攻撃もあるので、クッキーよりは安全性が高いというレベルでしかないと思っていたほうが良いです。

そのセッション情報を使用するにはPHPのコードの先頭(HTMLコードよりも上)にコードを1行書くだけで使用することができます。

この1行を書くだけでセッション情報を使用することができるようになります。

実際にはクッキーにセッションID保存されて、サーバー側も同じセッションIDを保持して、そのセッションIDをもと情報をやり取りすることが許可されることになります。

そのやりとりする情報が「$_SESSION」変数になります。

ちなみにクッキーに保存されているセッションIDはデベロッパーツールで確認できます。

$_SESSIONとは

$_SESSIONとは$_POSTと同じでPHPのスーパーグローバル変数になります。

スーパーグローバル変数はPHP全体を通して全てのスコープで使用可能な変数になります。

ログイン時のサンプルコード

こんな感じの普通のログイン画面のサンプルコードを下記します。

usersテーブルの構成は以下の通りです。

要は入力された認証情報とデータベースの情報を照合して、照合できたら$_SESSIONにIDを保存してページ遷移する。

これだけです。

$_SESSIONのキー値は任意のもので構いません。

ログインしていないと操作できないページについて

ログインしていないと操作できないページがあるかと思います。

そういった場合でもきちんとログイン情報をきちんと管理していないとURLを直接入力させるとログインせずに操作ができることになってしまいます。

これを防ぐために、ログインしていないと操作できないページについては以下のような対応が必要です。

このように$_SESSIONにIDがセットされていない場合はログイン画面に強制的にページ遷移させるようにします。

これでログインしていないと操作できないページのURLを直接入力された場合の対策ができました。

ちなみに$_SESSIONを使用する場合は必ず「session_start()」を記述しなければならないことに注意してください。

「session_start()」はセッションIDの設定と、セッションIDの確認の両方に使用されるためです。

ログアウト処理

最後にログアウト処理です。

ログアウトはログイン時に作成したセッションIDの削除を行います。

クッキーを削除する際に「time() – 42000」、「time() – 3600」などと買いているが、ここはクッキーの保持期間を設定する箇所で、現在であるtime()から値を引くことで過去の時間にして確実に削除しています。

別にtime()から引く値は42000や3600でなくても良いと思います。

まとめ

いかがだったでしょうか。

今回はPHP(ピュアPHP)でログイン、ログアウトする仕組みをサンプルコードを紹介しました。

重量なポイントは以下の通りです。

  • ログイン情報はセッションを使用して保存する
  • セッション情報を使用する場合はHTMLコードよりも先に「session_start()」を記述する
  • ログインしていないと操作できないページのURLを直接指定された場合の対応も忘れずに行う
  • ログアウトは「セッション変数のクリア」「クライアントのセッションID(クッキー)のクリア」「サーバーのセッションIDのクリア(session_destroy()」を行う

現在はLaravelなどのフレームワークを使用してWebアプリを作ることが多いでしょうが、PHP(ピュアPHP)でもきちんとログイン処理を作成できるようにしておきましょう。

ABOUT ME
Jyu2
【PC1台で稼ぐブロガー兼Webエンジニアを目指し中】IT情報やWebサービス、アプリなどの情報を発信/SIerで10年以上勤務→ストレスMAXで休職中→ブログとWebの学習を行い脱サラ計画中/ #30DAYSトライアル 1st完了→2nd実施中 / 日々の学習内容をブログにアウトプット / まずは月収5万円を目指す