[PHP-users 9034] session_set_save_handlerのgc について
go
php-users@php.gr.jp
Wed, 31 Jul 2002 13:01:28 +0900
いつもお世話になります。井上ともうします。
以前同じ質問をさせていただいてCRONを使うということをご指導いただいたのですが、
どうしても解決できなかいのでもう一度質問させてください。
セッションデータをMySQLで使用してユーザー管理したいと思っています。
session_set_save_handlerを使用してopen,close,read,write,destroyは問題なく動
いているのですが、gcだけなんの反応もありません。ログアウトしないときでも一定
時間が過ぎるとセッションのデータを全て削除したいと思っています。
Cronを使用するとのことでしたが、どのように指定すれば良いのでしょうか?
session_save_handler()を記述してあるファイルを指定するのでしょうか?
session_save_handler()を使用してGCを使ったことのある方、識者の方
ご指導よろしくお願いいたします。
以下の内容です。
環境
solaris8 2/02
Apache 1.3.26
php 4.2.1
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");
}