【PHP】session_name()は session_start() の前に呼び出すこと
仕様違反のコーディングをして???って状況になったのでメモ。
リクエストが開始された際にセッション名はリセットされ、 session.name に保存されたデフォルト値に戻ります。 よって、各リクエスト毎に(そして session_start() または session_register() をコールする前に) session_name() をコールする必要があります。
http://www.php.net/manual/ja/function.session-name.php
session_regenerate_idも呼び出したために挙動が混迷し、しばらく嵌りました。
公式にも、複数セッションを使っている場合は、session_regenerate_idの使い方に気をつける事(むしろ禁止?)との書込みが。
If you are trying to maintain 2 active sessions don't use session_regenerate_id().
http://www.php.net/manual/ja/function.session-regenerate-id.php
※以下の挙動は仕様に沿っていないコーディングのため、深追いはしません。。。
テストコード
<?php session_start(); session_name("hoge"); ←session_startの後にsession_nameを呼び出し // 現在のセッションIDを表示 echo session_name()."<br/>"; ←hoge echo session_id()."<br/>"; ←デフォルトのPHPSESSIDのセッションIDが表示される session_regenerate_id(true); echo session_name()."<br/>"; ←hoge echo session_id()."<br/>"; ←hogeのセッションIDが表示される
出力結果
hoge
bnid89jtp5dgh1b67aa91av7g7
hoge
tv6132k5k4qv6m041g29vv7k92