6-12 PHPでセッションを使って状態を管理する

Web開発学習ロードマップ

ここまでの記事で、
フォーム処理・バリデーション・XSS・CSRF と、
安全に入力を扱うための基礎 を一通り学びました。

しかし、Webアプリケーションには
もう一つ欠かせない要素があります。

それが、
「状態を保持する仕組み」 です。

・ログイン状態を覚えておきたい
・前の画面の情報を引き継ぎたい
・ユーザーごとに情報を管理したい

これらを実現するために使われるのが、
PHPのセッション です。

この記事では、
セッションとは何か、なぜ必要なのか、
PHPでの基本的な使い方
をコード付きで解説します。


この記事で学べること

・セッションとは何か
・なぜセッションが必要なのか
・session_start の役割
・セッションへの保存・取得方法
・ログイン処理につながる考え方


セッションとは何か

セッションとは、
ユーザーごとにサーバー側で情報を保存する仕組み です。

Webの通信(HTTP)は、
本来 状態を持たない という特徴があります。

つまり、

・ページを移動すると
・前の情報は基本的に失われる

という仕組みです。

この弱点を補うのが、
セッションです。


クッキーとセッションの違い

混同しやすいので、
ここで整理します。

・クッキー
 → ブラウザ(ユーザー側)に保存
・セッション
 → サーバー側に保存

セッションは、

・内容が外から見えない
・改ざんされにくい

という点で、
重要な情報の管理に向いています


セッションは何に使われるのか

代表的な利用例です。

・ログイン状態の管理
・ユーザーIDの保持
・一時的なメッセージ表示
・フォームの確認画面

Webサービスでは、
ほぼ必ず使われる仕組み です。


セッションを使うための準備

PHPでセッションを使うには、
必ず最初に行う処理 があります。

それが、
session_start() です。


セッションを開始する

サンプルコード①:セッション開始

<?php
session_start();

ポイント

・この1行でセッションが使えるようになる
・$_SESSION という配列が利用可能になる
・必ず 出力より前 に書く


セッションに値を保存する

セッションは、
連想配列として扱います。

サンプルコード②:セッションに保存

<?php
session_start();

$_SESSION['username'] = '太郎';

これで、

・キー:username
・値:太郎

が、
ユーザーごとに保存されます。


セッションから値を取り出す

保存した値は、
別のページでも取り出せます。

サンプルコード③:セッションの取得

<?php
session_start();

echo $_SESSION['username'];

ページを移動しても、
同じユーザーであれば
この値は保持されます。


ログイン状態を管理する考え方

ログイン処理では、
次のように考えます。

・ログイン成功時
 → セッションに情報を保存
・ログアウト時
 → セッションを削除

この仕組みだけで、
ログイン状態を管理 できます。


ログイン成功時の例

サンプルコード④:ログイン成功時

<?php
session_start();

$_SESSION['is_login'] = true;
$_SESSION['user_id'] = 1;

これで、

・ログインしているか
・誰がログインしているか

を、
セッションで判断できるようになります。


ログイン状態を判定する

サンプルコード⑤:ログインチェック

<?php
session_start();

if (!empty($_SESSION['is_login'])) {
  echo 'ログイン中です';
} else {
  echo 'ログインしてください';
}

この判定は、
ログインが必要なページすべて に書きます。


ログアウト処理の基本

ログアウト時には、
セッションを破棄します。

サンプルコード⑥:ログアウト

<?php
session_start();

$_SESSION = [];
session_destroy();

これで、
セッションに保存されていた情報は
すべて削除されます。


セッション使用時の注意点

セッションを使う際の注意点です。

・session_start を忘れない
・出力前に呼び出す
・重要情報を入れすぎない

特に、
session_start の書き忘れ
非常によくあるミスです。


セッションとCSRFの関係

前回学んだ
CSRFトークンも、
セッションに保存されていました。

これは、

・ユーザーごとに
・安全に
・値を保持する

という、
セッションの特性を活かした例です。


初心者がよくやるミス

セッションで多いミスです。

・session_start を書き忘れる
・セッションが消える理由が分からない
・ログイン判定を書いていない

「セッションはページをまたぐ」
という点を意識しましょう。


まとめ

この記事では、
PHPのセッションについて、

・セッションの役割
・保存と取得の方法
・ログイン管理の考え方

を学びました。

セッションが理解できると、
Webアプリケーションは
一気に 実用的な形 になります。


次に読むべき記事

▶ 次の記事
6-13 PHPでログイン処理の基本を作ってみよう

▶ 関連記事
6-11 CSRFとは?仕組みと対策

コメント