[PHP-users 8038] session_set_save_handlerのgc について

go php-users@php.gr.jp
Tue, 11 Jun 2002 11:09:05 +0900


すみません再送です、井上ともうします。

セッションデータをMySQLで使用してユーザー管理したいと思っています。
session_set_save_handlerを使用してopen,close,read,write,destroyは問題なく動
いているのですが、gcだけなんの反応もありません。ログアウトしないときでも一定
時間が過ぎるとセッションのデータを全て削除したいと思っています。
以下の内容です。

環境
solaris8 2/02
Apache 1.3.22
php 4.0.6
MySQL 3.23.45

●セッションテーブルの内容
CREATE TABLE session (
   sid varchar(32) NOT NULL default '',
   uid varchar(16) NOT NULL default '',
   password varchar(16) default NULL,
   rawdata varchar(255) default NULL,
   rdate timestamp(14) NOT NULL,
   PRIMARY KEY  (sid)
) ;

●php.iniの設定
session.save_handler = user (filesでもgc以外動作しました。)
session.gc_probability = 100 (%で表すため100にする)
session.gc_maxlifetime = 10 (テストで10秒にしています。)
session.save_path = /tmp(MySQLを使用しているのでファイル作成されません。)

●session_set_save_handlerの中のgcの内容
if(!isset($SessDBConn)){
   $SessDBConn=0;

   function RM_sess_open($garbage, $sid){
     global $sess_value, $SessDBConn;
include  "passwd.php";
   }

   function RM_sess_close(){
     global $sess_value, $SessDBConn;
     return true;
   }
       途中省略
        ・
        ・
        ・
//ここからが問題のgcの部分です。
     function RM_sess_gc($max){
     global $sess_value, $SessDBConn;
     if(!$SessDBConn) return false;
//実際に削除できるかセッション外で実験したら削除できました。
     $out = $max ;
     $sql  = "delete from session where rdate < (NOW() - $out )";
     mysql_query($sql , $SessDBConn);
   }

   session_set_save_handler(
          "RM_sess_open",
          "RM_sess_close",
          "RM_sess_read",
          "RM_sess_write",
          "RM_sess_destroy",
          "RM_sess_gc");
}

gcは、どのように動作するのかそれもご指導いただくとありがたいです。
どなたかご存じの方、申し訳ございませんがご指導宜しくお願いいたします。