[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
*---------------------------------------------------*