[PHP-users 6482] Re: session_set_save_handler の使い方
Yasuo Ohgaki
php-users@php.gr.jp
Mon, 25 Mar 2002 01:21:11 -0500
Shinya MATSUDA wrote:
> 松田です。
>
>
>>read関数で有効期限切れのセッションがあった場合
>
>
> というのは
> read関数で有効期限切れのセッションが分かるのですか?
> それは
> <?
> //$session_pathはすでにグローバル
>
> function read( $id ) {
> global $flag, $id;
> //ファイルの情報をGET!!
> $array = stat( "$session_path/sess_$id" );
> $lasttime = $array[ "st_atime" ];
> $flag = (タイムアウトを調べる);
> }
ファイルでセッションデータを管理する場合はread()はこうなると思います。
# 特に理由がなければ、mtimeの方が良いと思いますが、、
>
> function gc( $maxlifetime ) {
> if ( $flag )
> unlink( "$session_path/sess_$id" );
> }
> ?>
> みたいな感じですか?
>
gc関数は開いているファイルだけをunlinkしますから、このgc
関数は望まれている動作にはならないと思います。。
前のメールからすると、セッションが有効期限切れになった場合
に何かされたいのですよね?
一番簡単な方法はセッションの保存先をデータベースにして、
DELETE時にトリガーを使う方法ではないかと思います。
以下、蛇足です。
PostgreSQLを使われているのであれば、session_pgsqlを
利用すれば、自分でセーブハンドラを作成される必要もありません。
http://phpform-ext.sf.net/
PostgreSQLモジュールに配列を使ってレコードを挿入/削除/検索
する関数を作っているのですが、作りかけで放置しています。このた
め保存する情報をカスタマイズできません。今回のような用途では効
率が良くありませんが使えます。
# 2つのデータベース接続がWebサーバーのプロセス/スレッド
# から必要になる。
Zend.comにはuserセーブハンドラ版のPostgreSQLセーブハンドラ
も置いてあります。
http://www.zend.com/codex.php?id=456&single=1
--
Yasuo Ohgaki
__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/