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



コメント