2ZTLinux联盟 2ZTLinux联盟 <?php define ( 'MY_SESS_TIME' , 3600 ); 2ZTLinux联盟 2ZTLinux联盟 //SESSION 生存时长 2ZTLinux联盟 2ZTLinux联盟 //类定义 class My_Sess { function init () 2ZTLinux联盟 { $domain = '.infor96.com' ; 2ZTLinux联盟 2ZTLinux联盟 //不使用 GET/POST 变量方式 ini_set ( 'session.use_trans_sid' , 0 ); 2ZTLinux联盟 2ZTLinux联盟 //设置垃圾回收最大生存时间 ini_set 2ZTLinux联盟 ( 'session.gc_maxlifetime' , MY_SESS_TIME ); 2ZTLinux联盟 2ZTLinux联盟 //使用 COOKIE 保存 SESSION ID 的方式 ini_set 2ZTLinux联盟 ( 'session.use_cookies' , 1 ); 2ZTLinux联盟 2ZTLinux联盟 ini_set ( 'session.cookie_path' , '/' );2ZTLinux联盟 2ZTLinux联盟 //多主机共享保存 SESSION ID 的 COOKIE ini_set 2ZTLinux联盟 ( 'session.cookie_domain' , $domain ); 2ZTLinux联盟 2ZTLinux联盟 //将 session.save_handler 设置为 user, 2ZTLinux联盟 2ZTLinux联盟 //而不是默认的 files session_module_name ( 'user' ); 2ZTLinux联盟 2ZTLinux联盟 //定义 SESSION 各项操作所对应的方法名: session_set_save_handler 2ZTLinux联盟 ( array( 'My_Sess' , 'open' ), 2ZTLinux联盟 2ZTLinux联盟 //对应于静态方法 My_Sess::open(),2ZTLinux联盟 2ZTLinux联盟 下同。 2ZTLinux联盟 2ZTLinux联盟 array( 'My_Sess' , 'close' ), array( 'My_Sess' , 'read' ),2ZTLinux联盟 2ZTLinux联盟 array( 'My_Sess' , 'write' ), array( 'My_Sess' , 'destroy' ),2ZTLinux联盟 2ZTLinux联盟 array( 'My_Sess' , 'gc' ) ); }2ZTLinux联盟 2ZTLinux联盟 //end function function open ( $save_path , $session_name ) 2ZTLinux联盟 { return true ; } 2ZTLinux联盟 2ZTLinux联盟 //end function function close () { global $MY_SESS_CONN ; 2ZTLinux联盟 if ( $MY_SESS_CONN ) {2ZTLinux联盟 2ZTLinux联盟 //关闭数据库连接 $MY_SESS_CONN -> Close (); } return true ; }2ZTLinux联盟 2ZTLinux联盟 //end function function read ( $sesskey ) { global $MY_SESS_CONN ;2ZTLinux联盟 2ZTLinux联盟 $sql = 'SELECT data FROM sess WHERE sesskey=' 2ZTLinux联盟 2ZTLinux联盟 . $MY_SESS_CONN -> qstr ( $sesskey ) . ' AND expiry>=' . time ();2ZTLinux联盟 2ZTLinux联盟 $rs =& $MY_SESS_CONN -> Execute ( $sql ); 2ZTLinux联盟 2ZTLinux联盟 if ( $rs ) { if ( $rs -> EOF ) { return '' ; } else {2ZTLinux联盟 2ZTLinux联盟 //读取到对应于 SESSION ID 的 SESSION 数据 $v = $rs -> fields [ 0 ];2ZTLinux联盟 $rs -> Close (); return $v ; } 2ZTLinux联盟 2ZTLinux联盟 //end if } 2ZTLinux联盟 2ZTLinux联盟 //end if return '' ; } 2ZTLinux联盟 2ZTLinux联盟 //end function function write ( $sesskey , $data ) 2ZTLinux联盟 { global $MY_SESS_CONN ;2ZTLinux联盟 $qkey = $MY_SESS_CONN -> qstr ( $sesskey );2ZTLinux联盟 2ZTLinux联盟 $expiry = time () + My_SESS_TIME ; 2ZTLinux联盟 2ZTLinux联盟 //设置过期时间2ZTLinux联盟 2ZTLinux联盟 //写入 SESSION $arr = array( 'sesskey' => $qkey , 2ZTLinux联盟 'expiry' => $expiry , 'data' => $data );2ZTLinux联盟 2ZTLinux联盟 $MY_SESS_CONN -> Replace ( 'sess' , $arr , 'sesskey' ,2ZTLinux联盟 $autoQuote = true );2ZTLinux联盟 2ZTLinux联盟 return true ; } 2ZTLinux联盟 2ZTLinux联盟 //end function function destroy ( $sesskey ) 2ZTLinux联盟 { global $MY_SESS_CONN ;2ZTLinux联盟 2ZTLinux联盟 $sql = 'DELETE FROM sess WHERE sesskey=' . 2ZTLinux联盟 $MY_SESS_CONN -> qstr ( $sesskey );2ZTLinux联盟 2ZTLinux联盟 $rs =& $MY_SESS_CONN -> Execute ( $sql ); return true ; }2ZTLinux联盟 2ZTLinux联盟 //end function function gc ( $maxlifetime = null )2ZTLinux联盟 { global $MY_SESS_CONN ;2ZTLinux联盟 2ZTLinux联盟 $sql = 'DELETE FROM sess WHERE expiry<' . time ();2ZTLinux联盟 $MY_SESS_CONN -> Execute ( $sql );2ZTLinux联盟 2ZTLinux联盟 //由于经常性的对表 sess 做删除操作,容易产生碎片,2ZTLinux联盟 2ZTLinux联盟 //所以在垃圾回收中对该表进行优化操作。2ZTLinux联盟 2ZTLinux联盟 $sql = 'OPTIMIZE TABLE sess' ;2ZTLinux联盟 2ZTLinux联盟 $MY_SESS_CONN -> Execute ( $sql ); return true ; } 2ZTLinux联盟 2ZTLinux联盟 //end function } ///:~2ZTLinux联盟 2ZTLinux联盟 //使用 ADOdb 作为数据库抽象层。 require_once( 'adodb/adodb.inc.php' );2ZTLinux联盟 2ZTLinux联盟 //数据库配置项,可放入配置文件中(如:config.inc.php)。2ZTLinux联盟 $db_type = 'mysql' ;2ZTLinux联盟 2ZTLinux联盟 $db_host = '192.168.212.1' ; 2ZTLinux联盟 2ZTLinux联盟 $db_user = 'sess_user' ; 2ZTLinux联盟 2ZTLinux联盟 $db_pass = 'sess_pass' ; $db_name = 'sess_db' ;2ZTLinux联盟 2ZTLinux联盟 //创建数据库连接,这是一个全局变量。 $GLOBALS [ 'MY_SESS_CONN' ]2ZTLinux联盟 =& ADONewConnection ( $db_type ); 2ZTLinux联盟 2ZTLinux联盟 $GLOBALS [ 'MY_SESS_CONN' ]-> Connect ( $db_host , $db_user ,2ZTLinux联盟 $db_pass , $db_name );2ZTLinux联盟 2ZTLinux联盟 //初始化 SESSION 设置,必须在 session_start() 之前运行!!2ZTLinux联盟 My_Sess :: init (); ?> 2ZTLinux联盟 2ZTLinux联盟
|