LXXIXセッション処理関数

PHPのセッションサポート機能は、複数回のアクセスを通じて特定のデー タを保持する手段を実現するものです。これにより、よりカスタマイズさ れたアプリケーションを構築し、自分の Web サイトのアピール度を増加 させることが可能となります。

PHPLIB のセッション管理に精通している場合には、そのコンセプトがPHPの セッションサポートに似ていることに気づくことでしょう。

Web サイトの訪問者にはセッションIDというユニークなIDが割りつけられ ます。このIDは、ユーザー側にクッキーとして保存するか、または、URL に埋め込みます。

セッションサポート機能により、任意の数の変数をリクエスト間で受けわたせる ようになります。来訪者がサイトにアクセスした際、 PHP は特定のセッションIDがリクエストとともに送信されているかどうかを (session.auto_start が 1 の場合は)自動的に、または (session_start() により明示的な、あるいは session_register() により暗黙の) 要求を受けて確認します。 このIDが送信されている場合には、以前保存された変数が再現されます。

全ての登録された変数は、リクエストが終了した後に、シリアル化されます。 未定義の登録変数は、未定義としてマーク付けされます。 後でユーザーがこれらの変数を定義しない限り、以降のアクセスにおいて セッションモジュールにより定義されません。

設定ファイルの設定値 track_vars および register_globals によりセッション変数の回復方法を指定します。

注意 PHP 4.0.3以降、track_varsは常 に on となりました。

track_vars が有効で register_globals が無効の場合、グローバル変数配列$HTTP_SESSION_VARSのメンバーのみを セッション変数として登録可能です。回復されたセッション変数は配列 $HTTP_SESSION_VARSでのみ利用可能です。

例 1 track_vars が有効な時に変数を登録する


<?php
session_register("count");
$HTTP_SESSION_VARS["count"]++;
?>
     

register_globals が有効な場合、全てのグローバル変数はセッション変数として登録するこ とが可能で、セッション変数は対応するグローバル変数として回復されま す。

例 2 register_globals が有効な場合に、変数を登録する


<?php
session_register("count");
$count++;
?>
     

track_varsregister_globals が共に有効な場合、グローバル変数と$HTTP_SESSION_VARSエントリは同じ 値へのリファレンスとなります。

セッションIDの通知を行うためには次の二つの方法があります。

  • クッキー

  • URLパラメータ

セッションモジュールは、両方の方法をサポートします。 クッキーは最適ですが、(クライアントがクッキーを受け入れない可能性が あるため)信頼性がなく、頼ることができません。二番目の方法は、 セッションIDを直接URLに埋め込みます。

PHP は、--enable-trans-sidを付けてコンパイルされた 場合にこの処理を透過的に行います。 このオプションを有効にした場合、相対 URI はセッションIDを有するように 自動的に変更されます。 もしくは、クライアントが適当なクッキーを送信しない場合に 定義される定数 SID を使用することができます。 SID は、session_name=session_id の形式または空の文字列です。

次の例は、変数の登録法および SID を用いて他のページに 正しくリンクする方法のデモです。

例 3単一のユーザーに関するヒット数を数える


<?php
session_register("count");
$count++;
?>

こんにちは、あなたがこのページに来たのは<?php echo $count; ?>回目ですね。 <p>

<php?
# ユーザーがクッキーを使用不可としている場合は、セッションIDを
# 保持するために <?=SID?> が必要です。
?>

続けるには、
<A HREF="nextpage.php?<?=SID?>">ここをクリック</A>
して下さい。
     

PHPのコンパイル時に --enable-trans-sidを指定し た場合には、<?=SID?> は必要ありません。

注意 相対URLでないものは、外部サイトを指していると仮定されSIDが追加 されません。これは、SIDを異なったサーバにもらすことはセキュリティ 上のリスクとなるためです。

セッション情報をデータベースに保存する機能か他の保存法を実装するに は、一連のユーザレベルの保存関数を作成し、 session_set_save_handler()を使用する必要があり ます。

セッション管理システムは、php.ini ファイルに記述可能な多くの設定オ プションをサポートします。以下に概要を示します。

  • session.save_handler は、セッションに関連す るデータの保存および取得に使用されるハンドル名を定義します。デ フォルトは、filesです。

  • session.save_path は、保存ハンドラに渡される 引数を定義します。デフォルトのファイルハンドラ選択した場合、 ファイルが作成される場所のパスになります。デフォルトは、 /tmp です。

  • session.name はセッション名を指定し、 クッキー名として使用されます。 アルファベット文字のみで指定する必要があります。 デフォルトは、PHPSESSID です。

  • session.auto_start はリクエスト開始時に セッションモジュールがセッションを自動的に開始するかどうかを 指定します。デフォルトは、0(無効)です。

  • session.cookie_lifetimeは、ブラウザに送信す るクッキーの有効期間を秒数で指定します。値0は、"ブラウザを閉じ るまで"を意味します。デフォルトは、0です。

  • session.serialize_handler は、シリアル化また はシリアル化データを復元するために使用されるハンドラの名前を定 義します。現在、( phpという名前の)PHP 内部 フォーマットおよび(wddxという名前の)WDDX が サポートされています。WDDXは、PHP がWDDX サポート を有効にしてコンパイル されている場合のみ使用可能です。デフォルトは、 php です。

  • session.gc_probability は、gc (ガーベッジ・ コレクション)ルーチンが各リクエストにおいて開始される確率をパー セントで指定します。デフォルトは、1 です。

  • session.gc_maxlifetime は、データが'ごみ'と みなされてから消去されるまでの秒数を指定します。

  • session.referer_check には、HTTP Referer に おいて確認を行う文字列を指定します。Refererがクライアントにより 送信されており、かつ、指定した文字列が見付からない場合、埋め込 まれたセッションIDは無効となります。デフォルトは空の文字列です。

  • session.entropy_file は、 セッションIDを作成する際の別のエントロピソースとして使用する 外部リソースへのパスを指定します。 例としては、多くの UNIX で利用可能な /dev/random または /dev/urandom があげられます。

  • session.entropy_length は、前記のファイルから読みこむ バイト数を指定します。デフォルトは、0 (無効)です。

  • session.use_cookiesによりクライアント側にセッションID を保存する際にクッキーを使用するかどうかを指定します。デフォルトは 1 (有効)です。

  • session.cookie_pathによりsession_cokkieで設定する パスを指定します。デフォルトは/です。

  • session.cookie_domainによりsession_cookieで指定する ドメインを指定します。デフォルトでは指定されません。

  • session.cache_limiterにより セッションページにおけるキャッシュ制御の方法(nocache/private/public) を指定します。デフォルトは、nocacheです。

  • session.cache_expireによりキャッシュされた セッションページの生存期間を分単位で指定します。 このオプションは、nocacheリミッタに関しては効果がありません。 デフォルトは、180です。

注意 セッション処理機能は、PHP 4.0 でサポートされました。

目次
session_start -- セッションデータを初期化する
session_destroy -- セッションに登録されたデータを全て破棄する
session_name -- 現在のセッション名を取得または設定する
session_module_name -- 現在のセッションモジュールを取得または設定する
session_save_path -- 現在のセッションデータ保存パスを取得または設定する
session_id -- 現在のセッションIDを取得または設定する
session_register -- 現在のセッションに1つ以上の変数を登録する
session_unregister -- 現在のセッションから変数の登録を削除する
session_unset --  全てのセッション変数を開放する
session_is_registered --  変数がセッションに登録されているかどうかを調べる
session_get_cookie_params --  セッションクッキーのパラメータを得る
session_set_cookie_params --  セッションクッキーパラメータを設定する
session_decode -- 文字列からセッションデータをデコードする
session_encode --  現在のセッションデータを文字列としてエンコードする
session_set_save_handler --  ユーザ定義のセッション保存関数を設定する
session_cache_limiter -- カレントのキャッシュリミッタを取得または設定する
session_write_close -- セッションデータを書き込んでセッションを終了する