PHPのセッションとクッキーの関係

PHPのセッションとクッキーの関係を調べる。
次のファイルindex.phpをつくりブラウザでアクセスしてみる。

このときのhttpヘッダ(行きと帰り)は以下のようになる。

とくにクッキー関係はない。

つぎにindex2.phpを作り同様に実験してみる。

ヘッダは以下

サーバからSet-Cookie: PHPSESSID=he08r7184t432launpk1ufpg94; path=/ というのが帰ってきた。print_rで表示した$_COOKIEはからだった。

ここでこのページをリロードすると以下のようになる。

$_COOKIEは以下のようになる。

ここまでのまとめ

  • 何もないところからアクセスするとサーバはSet-Cookieヘッダを返す。
  • ブラウザはその情報を覚えておき、次にアクセスするときCookieヘッダでそれを送る。

index3.phpをつくり同様にやってみる。

なんかいリロードしてもしても上記のヘッダになる。つまり$_SESSIONに書いたものはヘッダには反映されない。これはサーバに保存されている。

サーバのtmpディレクトリにはファイル”sess_he08r7184t432launpk1ufpg94″が作られており、内容は以下になっている。

つまりブラウザから送られてきた、Cookie: PHPSESSID=he08r7184t432launpk1ufpg94からこのファイルを見つけ出してPHPはこのファイルの内容を$_SESSIONに書き込むのだろう。

index4.php

これを読み込むとリロードするごとに$_SESSION[‘mysessname2’]の値が増えていく。

ここでブラウザを終了させ、再びこのページにアクセスすると、PHPSESSIDも変わり、$_SESSION[‘mysessname2’]も0にもどる。つまりブラウザはなにもファイルには保存してない。こういうクッキーは一時的なクッキーなのだろう。

横路にそれて、少し関数の実験結果。
session_name(“mysessname”);をsessioin_start()の前に呼ぶと、PHPSESSIDがmysessnameに変わる。

session_id(“mysessid”);をsession_start()の前に呼ぶと、he08r7184t432launpk1ufpg94のような文字列がmysessidに変わる。本来この文字列はクライアントがCookieを送ってこないときは自動で作られるが、この関数で固定するとクライアントがCookieを送ってこないときも、サーバに保存してある情報を取り出せる。

実験したところ、同じサーバ上の2つのバーチャルホスト上でおなじセッションIDを使うと、同じ値が読み込まれてしまった。

ここではPHPのセッションとクッキーの関係について書いたが、クッキーのことについては有効期限やドメインやパスについては書いてないのでまた調べたいと思う。そもそもPHPセッションはクッキー以外でもできる方法があるので、クッキーとは別の機構だからクッキーを考えるときPHPセッションを使わなくてもいいかもしれない。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)