session_destroy()をしてもセッションデータが残る

session_destroyを行っても、その時点で$_SESSIONのデータが消えるわけではありません。

以下、3ファイルで動作検証


test.php … セッションデータセット
test1.pyp … session_destroy()コール
test2.php … 遷移後の確認用ページ
[test.php]

<?php
session_start();
$_SESSION['hoge'] = 123;

header('Location: test1.php');

[test1.php]

<?php
session_start();
session_destroy();

print_r($_SESSION);
?>
<br />
<a href="test.php">セッションセット後、自ページ</a><br />
<a href="test1.php">自ページ</a><br />
<a href="test2.php">別ページ</a><br />

[test2.php]

<?php
session_start();
print_r($_SESSION);
?>

test.phpでセットしてtest1.phpへリダイレクト
→ Array ( [hoge] => 123 ) ※session_destroyしても残っている

ただし、その後リロードすると消えます →Array ( )
また、自ページや別ページのリンクを押しても消えます。


即データを削除したい場合は、
以下のように明示的にデータを空にしてあげる必要があります。

$_SESSION = array();
session_destroy(); 


追記:同ページでも、destroy後、session_start()を呼んだら消えました

session_start();
$_SESSION['hoge'] = 123;
session_destroy();
print_r($_SESSION); // Array ( [hoge] => 123 )

session_start();
print_r($_SESSION); // Array ( )