[PHP-users 27296] Re: セッション情報 自動破棄するまでの時間

石井 栄徳 ishii @ seedplanning.co.jp
2005年 10月 25日 (火) 11:48:30 JST


石井です。
本筋から少しズレてきましたが面白そうなので。


On Tue, 25 Oct 2005 01:00:04 +0900
Yusuke Ando <ando @ rikezemi.com> wrote:

> session.gc_probablityの確率によりガーベッジコレクタが行うのはセッション
> 情報の物理的な削除(ファイルの削除、データベースからの削除など)のはずで
> す。
> 仮に運よくファイルなどが残っていてもPHPは有効期限が切れたセッションの情
> 報を読み込みません。


PHP4.3.11でのみ動作確認しましたが、有効期限が切れた(gc_maxlifetime
を超えた)セッションでも、GCによって削除されなければ、それは有効な
セッション情報としてみなす動作をしています。


下記テストコードで確認してみましたが、gc_maxlifetimeを1、
gc_divisorを10000に設定した上で5秒間隔でアクセスすると、
gc_maxlifetimeを超えたアクセスであってもセッション情報が読み込まれ
ていることを確認しました。(念のため、セッションファイルが削除さ
れていないことも確認)


この動作から察するに、セッションファイルが存在していれば、それは全
て有効なセッションとして扱われているのではないでしょうか。ソースを
読めるほどスキルがないので裏づけがとれないのがアレですが…。


PHP5では、ひょっとして安藤様のおっしゃる通りの動作をするのでしょう
か?もしよろしければ、後学のためにご教授いただけたらと思います。


■.htaccess
php_value session.gc_maxlifetime 1
php_value session.gc_probability 1
php_value session.gc_divisor 10000


■test.php
<?php

session_start();

if (isset($_SESSION['time']) && $_SESSION['time'] != '') {
    $time = '前回アクセスしたのは' . $_SESSION['time'] . 'です。';
} else {
    $time = '初回アクセスです。';
}

echo $time;

$_SESSION['time'] = date('Y/m/d H:i:s');
phpinfo();

?>


あと、関連情報としてバーチャルホスト運用時におけるセッションファイ
ルの格納方法についてちょっとだけ備忘録がありますので、もしよろしけ
れば参照してください。

http://www.spanstyle.com/item/27


------------------------------------------------------------
ishii @ seedplanning.co.jp



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