[PHP-users 6819] unset($_SESSION['...'])
Eita Morikawa
php-users@php.gr.jp
Thu, 11 Apr 2002 13:09:54 +0900
森川と申します。
PHP4.1.2
register_globals = * Off *
Vine Linux 2.1.5
グローバル変数$sessが未定義の場合は、
unset($_SESSION['sess']);
とやるだけで、セッション変数は削除されますが、
グローバル変数$sessが定義済みの場合は、
unset($_SESSION['sess']);
unset($sess);
としないと、削除されないようですが、
これは仕様でしょうか?
#[PHP-users 5401]からのスレッドに同様の話が
#でていますが、結局はっきりしていないので
#投稿させていただきました。
テストしたスクリプトと実行結果を示します。
-- (script) : a.php ---------------------
session_start();
foreach($_SESSION as $key => $value) {
print "$key => $value <BR>";
}
$_SESSION['sess1']++;
$_SESSION['sess2']++;
-- (script) : b.php --------------------
session_start();
$sess1 = (isset($sess1)) ? $sess1+10 : 10000;
print "set '$sess1' to \$sess1 <BR>";
foreach($_SESSION as $key => $value) {
print "$key => $value <BR>";
}
unset($_SESSION['sess1']);
unset($_SESSION['sess2']);
-- (結果) : a.php --------------------
(セッション変数未定義なので表示なし)
-- (結果) : a.php -> b.php -----------
set '10000' to $sess1
sess1 => 1
sess2 => 1
-- (結果) : a.php -> b.php -> a.php---------------------
sess1 => 10000 <- b.phpでunsetしたのに残っている!!
-- (結果) : a.php -> b.php -> a.php -> b.php -----------
set '10000' to $sess1
sess1 => 10001
sess2 => 1
-- (疑問点) -----------------------------------------------
b.phpで$sess1を定義すると、
b.phpでunset($_SESSION['sess1'])したにもかかわらず、
a.phpで$_SESSION['sess1']が定義される。
しかも、a.phpの$_SESSION['sess1']は
10001(b.phpの$_SESSION['sess1'])ではなく、
10000(b.phpで定義した$sess1)となる。
----------------------------------------------------------
b.phpで、$_SESSION = array()としても同じ結果です。
どう理解したらいいんでしょう?