PHP

HTTP環境とHTTPS環境での、session.cookie_secureの挙動の違い

よくよく考えれば当たり前のことなんだけど、結構ハマった。。
PHPの設定にあるsession.cookie_secureについて、この値をtrue(有効)とした場合のHTTP環境とHTTPS環境の挙動の話。

HTTPS環境での挙動

SessionのCookieを付与する際、デフォルトでセキュアフラグが立つ。
(具体的には、setcookieの6番目の引数をtrueにした時の挙動と同様)
一度作成したCookieは、expireで指定された期限内で有効

とまあ、ここまではよくある話。

HTTP環境での挙動

SessionのCookieを付与する際、デフォルトでセキュアフラグが立たない。
(具体的には、setcookieの6番目の引数をfalseにした時の挙動と同様)
一度作成したCookieは、アクセス毎に値が更新される。

ということは、HTTP環境でアクセスする場合、session.use_trans_sidを有効とかにして、都度session_idにセットしてあげないと、同じセッションを見に行かない。(このやり方がいいかどうかは置いておいて)
内部的なことまでは調べられていないんだけど、おそらくsession.cookie_secureが有効の時にHTTP環境でsessionを発行すると、アクセス毎に意図的にsession_regenerate_id()とかが動いているのかなと思ってみる。