[PHP-users 28274] セッション情報の更新条件

HOTTA Michihide hotta @ net-newbie.com
2006年 1月 30日 (月) 13:21:59 JST


堀田@長崎市%セッション変数初心者(?)です。

$_SESSION をセッション情報(デフォルトはファイル)へ書き戻す際の
条件について教えてください。

以下のようなスクリプトがあります。

m-hotta @ pine:~/html$ cat b.php
<?php
session_start();
$_SESSION['b1'] = 3;
$_SESSION['b2'] = 4;
printf("session_id = %s\n<br>\$_SESSION =", session_id());
print_r($_SESSION);
print '<br><a href="c.php">c.php</a></body><html> ';
?>

m-hotta @ pine:~/html$ cat c.php
<?php
session_start();
$tmp = array('c1' => 5, 'c2' => 6);
$_SESSION = $tmp;                           // ここが問題の箇所
printf("session_id = %s\n<br>\$_SESSION =", session_id());
print_r($_SESSION);
?>

---- a.php の呼び出し ----
m-hotta @ pine:~$ w3m http://localhost/b.php
session_id = 4r24ljpda09ghj427humbq3m24
$_SESSION =Array ( [b1] => 3 [b2] => 4 )
c.php
---- この時点のセッションファイルの内容 -----
# cat /tmp/sess_4r24ljpda09ghj427humbq3m24
b1|i:3;b2|i:
---- c.php をクリックした後の表示結果 -----
session_id = 4r24ljpda09ghj427humbq3m24
$_SESSION =Array ( [c1] => 5 [c2] => 6 )
---- この時点のセッションファイルの内容 -----
# cat cat /tmp/sess_4r24ljpda09ghj427humbq3m24
b1|i:3;b2|i:4;

このように、$_SESSION への変更が反映されていません。

ちなみに 
$_SESSION = array(...)
のように、代入時に変数を介さなければうまくいくようです。
これはバグ?それとも仕様?

リファレンスとかそのへんのからみかなぁとは思うんですが、どなたか
この理由をわかりやすく説明していただけないでしょうか?

なお、マニュアルには

------------------------------------
【注意】
unset($_SESSION)によって全ての$_SESSIONを初期化してはいけません。
$_SESSIONスーパーグローバル変数を用いたセッション変数の登録が
できなくなってしまうからです。 
------------------------------------

なんて記述もありますが、ひょっとしてこのあたりも関係しますか?
-- 
HOTTA Michihide <hotta @ net-newbie.com>


PHP-users メーリングリストの案内