1. TOPTOP
  2. Webサービス
  3. PHP

session_set_cookie_params()関数で生成されるセッションCookieはメモリに保存される ~ CookieとセッションCookieの違い

|

thumbnail

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()関数で自分のサイトのパスを設定すると良いでしょう。

session_set_cookie_params(0, '/~sample/', 'www.example.php');

自分はWebサイトやWebアプリケーションとしてのレンタルサーバーは使っていませんが、「さくらのVPS」の1つのIPアドレスで複数ドメイン(バーチャルホスト)のWebサイトを運用する計画があります。そのときの知識として使えそうですね。

【参考サイト】