使用session_set_save_handler函数重载SESSION存储方式之MYSQL
<? $DB_SERVER = 'server'; /* database server hostname */ $DB_NAME = 'dbname'; /* database name */ $DB_USER = 'root'; /* database user */ $DB_PASS = '*************'; /* database password */
$DB_SELECT_DB = ''; $SESS_LIFE = get_cfg_var('session.gc_maxlifetime');
function sess_open($save_path, $session_name) { global $DB_SERVER, $DB_NAME, $DB_USER, $DB_PASS, $DB_SELECT_DB;
if (! $DB_SELECT_DB = mysql_pconnect($DB_SERVER, $DB_USER, $DB_PASS)) { echo 'SORRY! MYSQL ERROR : Can't connect to $DB_SERVER as $DB_USER'; echo 'MySQL Error: ', mysql_error(); die; }
if (! mysql_select_db($DB_NAME, $DB_SELECT_DB)) { echo 'SORRY! MYSQL ERROR : Unable to select database $DB_NAME'; die; }
return true; }
function sess_close() { return true; }
function sess_read($SessionKey){global $DB_SELECT_DB, $SESS_LIFE;$Query = 'SELECT SessionArray FROM cdb_global_sessions WHERE SessionKey = ''.$SessionKey.'' AND SessionExpTime > ' . time();$Result = mysql_query($Query, $DB_SELECT_DB);
if (list($SessionArray) = mysql_fetch_row($Result)) { return $SessionArray; }
return false; }
function sess_write($SessionKey, $VArray) { global $DB_SELECT_DB, $SESS_LIFE;
$SessionExpTime = time() + $SESS_LIFE; $SessionArray = addslashes($VArray);
$Query = 'INSERT INTO cdb_global_sessions (SessionKey,SessionExpTime,SessionArray) VALUES (''.$SessionKey.'',''.$SessionExpTime.'',''.$SessionArray.'')'; $Result = mysql_query($Query, $DB_SELECT_DB);
if (!$Result){ $Query = 'UPDATE cdb_global_sessions SET SessionExpTime = ''.$SessionExpTime.'', SessionArray = ''.$SessionArray.'' WHERE SessionKey = ''.$SessionKey.'' AND SessionExpTime > ' . time(); $Result = mysql_query($Query, $DB_SELECT_DB); } return $Result; }
function sess_destroy($SessionKey) { global $DB_SELECT_DB;
$Query = 'DELETE FROM cdb_global_sessions WHERE SessionKey = ''.$SessionKey.'''; $Result = mysql_query($Query, $DB_SELECT_DB);
return $Result; }
function sess_gc($maxlifetime) { global $DB_SELECT_DB;
$Query = 'DELETE FROM cdb_global_sessions WHERE SessionExpTime < ' . time(); $Result = mysql_query($Query, $DB_SELECT_DB);
return mysql_affected_rows($DB_SELECT_DB); }
session_set_save_handler( 'sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');
session_start(); ?>