そういえばPHPのセッション周りの質問が出ていて、コメントを残したものがあったと思い出して確認したところ、キャンセル扱いになっていたので、メモをしておきます。
質問の概要(うろ覚え)は、
- ブラウザで読み込むごとにセッションのIDを変更している
- $_COOKIE[session_name()]の値が前回読み込んだ値になっていて更新されない
- 理由が分からない
という内容であったと思います。
「ユーザー管理を行う為の実装」であり、直接関係が無い部分を解説するコメントをしたのですが、書いたものが消えてしまったので、こちらに残します。
サンプル
AはCOOKIEに保存される名前です。特に値を設定していないので、
となります。
初めてのアクセスでは B,Cの値は以下のようになります。
Bはnullとなりますが、環境によっては「Notice: Undefined index」と怒られます。
さて、DにてセッションIDを変更して、それぞれの値をもう一度確認しましょう。
E,Fの値は
セッションIDは変わりましたが、「 $_COOKIE[session_name()] 」はnullのままとなっています。
ブラウザをリロードしてみましょう。
Aは変わりません。
B,Cは前回の「F」の値が入っています。
DにてセッションIDを変更して、それぞれの値をもう一度確認しましょう。
E,Fの値は
このようになりました。Fのみ変更されています。
「 $_COOKIE[session_name()] 」は、サーバにアクセスしたときの値をそのまま保持しますので、セッションIDを変更してもそのままになります。*1
セッションIDはCOOKIEの値を読むのではなく、session_id()を利用しましょう。
というお話でした。
なお、セッションとして保持している値は、サーバ側にあります。
ブラウザ側が持っているのは「私の情報は、このIDが付いている物の中にあります」という情報のみです。
PHPは特に難しくありません :)
からくり熊。
*1:無理に変更しなければ