[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 メーリングリストの案内