[PHP-users 4280] Re: PHP4.1.0 でセッション変数をunset した場合
Toshiyuki Kajii
php-users@php.gr.jp
Fri, 14 Dec 2001 01:51:02 +0900
梶井です。
* Fri, 14 Dec 2001 00:51:35 +0900
* "Eita Morikawa" <chanoma@parknet.co.jp> wrote:
>セッション変数をunsetした場合の挙動が少なくともPHP4.0.6(及び4.0.5)と
>PHP4.1.0で違うのですが、PHP4.1.0での挙動がどうも納得いかないので
>質問させてください。
ここ最近、セッションの挙動についていろいろと試してみていました。
この4パターンを試されたのは、global_registerは当然Onであると思い
ますが、4.0.6でcase3と4について
$HTTP_SESSION_VARS['a'] = array("key3" => "value3");
とやってみると、セッションへの登録はできないですよね。
しかし、4.1.0では
$_SESSION['a'] = array("key3" => "value3");
で登録出来ます。
ソースを読んだわけではないので、これは私の想像なのですが、
session_register('a');
の時点で、
$_SESSION['a'] = &$a;
が行われているのではないでしょうか。
その為に、一端unset($a)としてしまうと、参照として$_SESSION['a']
は残っているので、次に$aを確保したときは別のものになっていると。
試したわけではないのですが、私の想像が正しければ、
session_register(a);
unset($a);
これを逆にすると、目的の結果になりませんか?
> 4.0.5 4.1.0
>case1 key2 空
>case2 key2 key1
>case3 (key2) key3
>case4 (key2) key3
>
>case3,case4は$_SESSIONも使ってみたので、PHP4.0.5
>での実行結果は意味がないかもしれませんが、PHP4.1.0での
>結果はどれも、自分のイメージとは違います。あるべき姿は
>
>case1 key2
>case2 key2
>case3 key2,key3
>case4 key2,key3
>
>のように思っていますが、考え違いしていますでしょうか?
>
>#尚、unset($a) を $a=array(); に書き換えると、PHP4.1.0でも
>#case1とcase2についてはkey2となりました。
unsetではなく、中身を空にするとこの結果になるというのも、そうだ
と思います。
とりあえず、推奨されないようですし、global_registerはOffにした
方が賢明かと...
#説明下手ですね。すいません...
*---------------------------------------------------*
Toshiyuki Kajii 梶井 俊幸
e-mail: mikoto@camino.nissan.ne.jp
*---------------------------------------------------*