[PHP-users 4754] Re: PHPlib:マルチログイン防止をガーベッジコレクションで対応するべきか

php-users@php.gr.jp php-users@php.gr.jp
Wed, 16 Jan 2002 22:23:02 +0900


はじめまして。泰野と申します。

横から口をはさむようで申し訳ないのですが、ひとこと。

PHPLIBのマニュアルに、「UserクラスのGCはメソッドstart()の中で、コメント
アウトされていて、これを外せば、きちんと動作する」という趣旨の記述があり
ます。
で、Userのstart()を見てみると、コメントアウトされている行は存在しません。
しかし、UserのスーパークラスSessionのstart()と比較したとき、それぞれの固
有の処理を差し引けば、gc()コールするかしないかの程度の差しかありません。
ですから、マニュアルの記述も考慮すると、Userクラスのstart()の最後に
$this->gc();
を追加すれば、UserクラスのGCは動作するのではないでしょうか?
自分で試したわけではないし、ソースを詳しく調査したわけでもないので、
間違っていたら御免なさい。

そうそう、私のところにあるPHPlibは7.2cです。

On Wed, 16 Jan 2002 19:54:46 +0900
"vantest" <vantest@livedoor.com> wrote:

> バンテストです。
> 
> > これは,ログアウトとしても active_sessions のレコードが消えないという
> > ことですか? 試しに,session クラスで,
> >   var $gc_time  = 1;
> >   var $gc_probability = 100;
> > のような設定をすると,ログアウトしてから1分以上経って別なセッションを
> > 開始すると古いセッションレコードが消えました.もちろんDBはPostgreSQLで
> > す(というか,コンテナに使用するRDBの種類によらず,GC機構はちゃんと働く
> > はずです).
> >
> > こういう話ではない?
> 
> セッションレコードに対するGC機構は動作しています。
> 別なセッションを開始すると古いセッションレコードが消えます。
> 具体的には「active_sessions 」テーブルにおいて、nameフィールドが
> 「Example_Session」の
> 古いレコードだけが消えます。
> ところがnameフィールドが「Example_User」のレコードはそのまま残っています。
> 「Example_User」のレコードは認証が成功したタイミングでテーブルに記録されま
> す。
> いつまで経っても消えないので、GC機構にこのレコードを削除する機構を新たに組み
> 入れ
> ようと考えている訳です。
> 石井さまのサーバーではいかがでしょうか。
> 本来であれば、この「Example_User」のレコードもGC機構で削除されるのでしょう
> か。
> そうであればGC機構へ新たに削除機構を追加する必要がなくなりますが、現実には
> 削除されないのです。
> 参考までに次が私のサーバーにインストールされているバージョンです。
> インストールされているバージョンに関係ありますか?
> PHP     →    4.0.3p11
> PHPLib →    7.2d
> 
> 
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> 

-- 
泰野 裕士
 <yasuno@ops.ne.jp>