PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)のP.599を読んでいるとセッションCookieという見慣れない用語が出てきました。セッションやCookieという用語は、PHPやそのサーバーセキュリティを理解する上でとても重要です。
これら2つの用語は、いろいろな書籍やブログ記事で見かけます。ですが個人的な経験上、セッションCookieという用語は、はじめて知りました。
セッションCookieのパラメータを返す組み込み関数
PHPの公式ドキュメントを確認すると、セッションCookieのパラメータを得る組み込み関数として、session_set_cookie_params()関数が紹介されています。ですがこのページの用法を見ても、いまいち何のことであるか分かりません。
ですので、セッションとセッションCookieに関わるコードを記述して、両者を比べてみました。そのコードはGitHubにUPしています。
セッションとセッションCookieの比較
結論から言うと、通常のセッションはセッションIDを用いて、クライアントPCのCookieに情報を保持します。一方セッションCookieはメモリーに情報を保持します。具体的にseesion_set_params.phpの例を用いて説明しましょう。
通常のセッションの場合
クライアントPCのCookieに情報を保持するため、配列を初期化することで削除することが可能です。20行目の「2. 現在のセッションの設定内容」では、セッションの内容が表示されます。
ですが、27行目で定義済みの変数である$_SESSIONの内容をarray()で空配列を代入すると、$_SESSION[‘name’]の内容は表示されず、”Notice: Undefined index: name(定義されていない配列の変数)“が返されます。
セッションCookieの場合
クライアントPCのメモリに情報を保持するため、配列を初期化しても削除することはできません。「1. 現在のセッションCookieの設定内容」と「3. 初期化後のセッションの設定内容(削除不可)」は、どちらも同じく配列の内容が表示されます。
session_get_cookie_params()の使いどころ
何でこんな関数が存在するのか、いまいち分かりませんでしたが、PHP逆引きレシピ 第2版の(P.599)で、コードの引用も含めて以下のように説明されています。
デフォルトでは、セッションCookieはセッションCookieを発行したサイト(同一ホスト名)のどのページでも有効です。複数のユーザーがホスト名を共有するレンタルサーバーや同一のホストでディレクトリを分けて複数のWebアプリケーションを動作させている場合、他のサイトや他のWebアプリケーションへもCookieが送信されてしまうため、セッションが共有されてしまう可能性があります。以下のように、session_set_cookie_param()関数で自分のサイトのパスを設定すると良いでしょう。
[php]session_set_cookie_params(0, ‘/~sample/’, ‘www.example.php’);[/php]
自分はWebサイトやWebアプリケーションとしてのレンタルサーバーは使っていませんが、「さくらのVPS」の1つのIPアドレスで複数ドメイン(バーチャルホスト)のWebサイトを運用する計画があります。そのときの知識として使えそうですね。
【参考サイト】