[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/