[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 メーリングリストの案内