[PHP-users 25518] Re: session_regenerate_id が古いセッションファイルを消さない件

komura komura @ ma9.seikyou.ne.jp
2005年 4月 30日 (土) 02:00:54 JST


komura です。

On Fri, 29 Apr 2005 23:53:15 +0900
haward99 @ yahoo.co.jp wrote:

> すぐsession_destroy()したら、
> せっかくsession_regenerate_id() でセッションIDを変えて継続させようとしている
> セッションが壊れてしまって元も子もないような気がするのは
> わたしの勘違いなんだろうか・・・?

以下のように session_destroy() を実行する前にセッションの値を保存して
書き戻せば Session ID が変わってもセッションデータを継続することが
できると思います。PHP 4.3.11 で確認しました。

<?php
session_start();
$tmp = $_SESSION;
session_destroy();

session_start();
session_regenerate_id();
$_SESSION = $tmp;

if ( ! isset( $_SESSION['count'] ) ) {
    $_SESSION['count'] = 0;
}
++$_SESSION['count'];

print_r( $_SESSION );
echo session_id();
?>

問題としては、アクセスする毎にセッションファイルが作成されるため、アクセス
回数が多い場合は、大量のゴミファイルが残ります。
この方法で毎回 Session ID を変更するのであれば、ガーベージ・コレクション
の起動確率を高めにした方が良いと思います。

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内