2E セッション
PHPはセッション機能をサポートします。 PHPはセッションを管理するためにユーザセッションごとにセッションIDを割り付け、 IDをクッキーとして保存するか、または、URL に埋め込みます。
PHPのセッション変数は定義済み変数( $_SESSION )に格納されます。 このセッション変数はセッションIDと結び付いており、リクエスト処理が終了した後にシリアル化されます。 そして同じセッションの次のリクエストで非シリアル化されます。
通常、セッションの開始は session_start() 関数により明示的に行います。 設定ファイルの session.auto_start を 1 (有効)とした場合は、 セッションが自動的に開始されますが、この場合は、セッション変数にオブジェクトを代入できません。 この制限は、セッション開始前にクラス定義がロードされている必要があるためです。 session.auto_start はデフォルトで 0 (無効)です。
2E.1 セッションID
セッションが開始されるとPHPはセッションIDを発行します。 このセッションIDは、同一セッションである事を識別するために、以降のページに通知する必要があります。 PHPがセッションIDをページに通知する方法には、
- クッキー と
- URLパラメータ
PHPはまずクッキーを使ってセッションIDを通知しようと試みます。 セッションIDがクッキーに保存されいる場合、 $_COOKIE の中を見ると以下のようになっています。
print_r($_COOKIE);
Array ( [PHPSESSID] => aee0378a15e4721c82bb155b87b947aa )
クッキーは最適な方法ですが、クライアントはクッキーを受け入れない可能性があります。 この場合、セッションIDをURLに埋め込むという手段が取られます。 URLを使ったセッションIDの通知は自動または手動で行う事ができます。セッションIDは次の形式でURLに埋め込まれます。
session_name=session_id
PHPSESSID=aee0378a15e4721c82bb155b87b947aa
※ session_name は設定ファイルの session.name で設定します。( デフォルトは PHPSESSID です )
URLを使ったセッションIDの通知はセッションIDがユーザに見えてしまうのであまり推奨されません。 従って、URLを使った自動的なセッションIDの通知はデフォルトで無効になっています 。 PHPの設定ファイルで session.use_trans_sid を有効にすると、クッキーに有効なセッションIDが見つからなかった場合、 PHPは自動的に相対URLにセッションIDを埋め込むようになります。 この機能を使用するとクッキーが使用できない場合でも、自動的にURLでセッションIDを通知する事ができます。
URLを使って明示的にセッションIDを通知したい時は、定義済み定数( SID )を使用します。 SIDは、クッキーに有効なセッションIDが見つからなかった場合、「 session_name=session_id 」形式の値を持ちます。 一方、クッキーに有効なセッションIDが見つかった場合、SIDは空の文字列になります。
<a href="sample.php?<?php echo strip_tags(SID) ?>">次のページへ</a>
※ この例では、XSS攻撃を防止するためにSIDを出力する際に strip_tags() を使用しています。 strip_tags() は文字列からHTMLとPHPタグを取り除く関数です。
