これまでの記事では、
フォーム送信・バリデーション・XSS・CSRF と、
安全な入力処理の流れ を学んできました。
しかし、Webアプリケーションを作る上で
もう一つ欠かせない概念があります。
それが セッション です。
・ログイン状態を保持したい
・前の画面の情報を引き継ぎたい
・ユーザーごとに状態を管理したい
これらを実現するために使われるのが、
PHPのセッション機能 です。
この記事では、
セッションとは何か、なぜ必要なのか、
PHPでの基本的な使い方 をコード付きで解説します。
この記事で学べること
・セッションとは何か
・なぜセッションが必要なのか
・PHPでセッションを開始する方法
・セッションへの保存・取得
・ログイン処理の基本的な考え方
セッションとは何か
セッションとは、
ユーザーごとにサーバー側で情報を保存する仕組み です。
HTTP通信は、
本来「状態を持たない(ステートレス)」
という特徴があります。
つまり、
・ページを移動すると
・前の情報は基本的に失われる
という仕組みです。
その弱点を補うのが、
セッションです。
クッキーとセッションの違い
混同しやすいので整理します。
・クッキー
→ ブラウザ(ユーザー側)に保存
・セッション
→ サーバー側に保存
セッションは、
・内容が外から見えない
・改ざんされにくい
という点で、
重要な情報の管理に向いています。
セッションは何に使われるのか
代表的な利用例です。
・ログイン状態の管理
・ユーザーIDの保持
・一時的なメッセージ表示
・フォーム確認画面
Webサービスでは、
ほぼ必ず使われています。
セッションを使うための準備
PHPでセッションを使うには、
必ず最初に行う処理 があります。
それが、
session_start() です。
セッションを開始する
サンプルコード①:セッション開始
この1行で、
・セッションが開始され
・$_SESSION という配列が使える
ようになります。
※ この処理は、
出力より前 に書く必要があります。
セッションに値を保存する
セッションは、
連想配列として扱います。
サンプルコード②:セッションに保存
これで、
・username というキーに
・「太郎」という値
が保存されます。
セッションから値を取り出す
保存した値は、
次のように取り出せます。
サンプルコード③:セッションの取得
ページを移動しても、
同じユーザーであれば
この値は保持されます。
ログイン状態の基本的な考え方
ログイン処理では、
次のように考えます。
・ログイン成功時
→ セッションにユーザー情報を保存
・ログアウト時
→ セッションを削除
これだけで、
ログイン状態を管理できます。
ログイン成功時の例
サンプルコード④:ログイン成功処理
この状態では、
・ログイン中かどうか
・誰がログインしているか
を、
セッションで判断できます。
ログイン状態を判定する
サンプルコード⑤:ログインチェック
このように、
条件分岐と組み合わせて使います。
ログアウト処理の基本
ログアウト時には、
セッションを破棄します。
サンプルコード⑥:ログアウト
これで、
セッションに保存されていた情報は
すべて削除されます。
セッション使用時の注意点
セッションを使う際の注意点です。
・session_start を忘れない
・出力前に呼び出す
・重要情報を入れすぎない
特に
session_start の書き忘れ は
非常に多いミスです。
セッションとCSRFの関係
前回学んだ CSRF トークンも、
セッションに保存されていました。
これは、
・ユーザーごとに
・安全に
・値を保持する
というセッションの特性を
活かしている例です。
セッションを理解すると何ができるか
セッションが理解できると、
・ログイン機能
・マイページ
・管理画面
・フラッシュメッセージ
といった
Webアプリらしい機能
が実装できるようになります。
まとめ
PHPのセッションは、
・ユーザーごとに情報を保持
・サーバー側で安全に管理
・ログイン処理の土台
という重要な役割を持っています。
ここまで理解できれば、
PHP基礎としては
実務の入口レベルを完全にクリア です。
次に読むべき記事
▶ 次の記事
6-13 PHPでログイン処理の基本を作ってみよう
▶ 関連記事
6-11 CSRFとは?仕組みと対策



コメント