せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【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

f:id:sekaiya:20130728204241j:plain