[PHP-users 4282] Re: PHP4.1.0 でセッション変数をunset した場合

Toshiyuki Kajii php-users@php.gr.jp
Fri, 14 Dec 2001 03:54:03 +0900


梶井です。
実験してみましたので報告と、補足です。

>* Fri, 14 Dec 2001 00:51:35 +0900
>* "Eita Morikawa" <chanoma@parknet.co.jp> wrote:
>>          4.0.5    4.1.0
>>case4  (key2)  key3

まず、array()は、

array_merge($a, array("key" => "value"));

とかしないとダメです。
そうすると、case4ではkey1,key3になります。

register_globalsをOffにした状態で文末のソースを試すと、

case1  空
case2  key1
case3  key3
case4  key1,key3

となりました。

というわけで、register_globalsがOnの時は、session_register('a')と
すると、$_SESSION['a']=&$aを同時に行うということに置き換えられる
ようです。
そもそも、session_registerで宣言せずとも$_SESSIONをいきなり呼んで
よいということが、$_SESSIONですべて登録されることを示唆している気
もします。

なので、unsetしたあとに、再度$_SESSION['a'] = &$aとしてやれば、期
待される結果を得られます。(念のため試しました。

// case 1:
 $a = array();
 session_register("a");
 $_SESSION['a'] = &$a;
 unset($a);
 $a = array_merge($a, array("key2" => "value2"));

// case 2:
 $a = array("key1" => "value1");
 session_register("a");
 $_SESSION['a'] = &$a;
 unset($a);
 $a = array_merge($a, array("key2" => "value2"));

// case 3:
 $a = array();
 session_register("a");
 $_SESSION['a'] = &$a;
 unset($a);
 $a             = array_merge($a, array("key2" => "value2"));
 $_SESSION['a'] = array_merge($_SESSION["a"], array("key3" => "value3"));

// case 4:
 $a             = array("key1" => "value1");
 session_register("a");
 $_SESSION['a'] = &$a;
 unset($a);
 $a             = array_merge($a, array("key2" => "value2"));
 $_SESSION['a'] = array_merge($_SESSION["a"], array("key3" => "value3"));


*---------------------------------------------------*
    Toshiyuki Kajii    梶井 俊幸
    e-mail:            mikoto@camino.nissan.ne.jp
*---------------------------------------------------*