$mtime + $nMaxLifeTime){ $bReturn = (deleteDirectory($szSessionDir)) ? $bReturn : false; } closedir($hDir); return $bReturn; } } function deleteDirectory($szFile){ debug_msg("deleteDirectory: called from:".$_SERVER['PHP_SELF']); if (is_dir($szFile)){ debug_msg("DELETE:".$szFile); $handle = opendir($szFile); while($szFileName = readdir($handle)){ if ($szFileName != "." && $szFileName != ".."){ deleteDirectory($szFile."/".$szFileName); } } closedir($handle); rmdir($szFile); } else { unlink($szFile); } } function installSessionDirectoryHandler($szGCCallBack=""){ debug_msg(" installSessionDirectoryHandler: ".$_SERVER['PHP_SELF']); if (!isset($GLOBALS['gszSessionDirectoryHandlerInstalled'])) { $GLOBALS['gszGarbageColectionCallBackFunction'] = $szGCCallBack; // Set handler functions session_set_save_handler("_open", "_close", "_read", "_write", "_destroy", "_gc"); $GLOBALS['gszSessionDirectoryHandlerInstalled'] = true; } } function initializeSession( $szSessName="sid", $szSessSavePath="", $szSessionID="" ){ debug_msg(" initializeSession: ".$_SERVER['PHP_SELF']); if($szSessName != ""){ debug_msg("session.name".$szSessName); ini_set("session.name", $szSessName); } if($szSessSavePath != ""){ debug_msg("session.save_path".$szSessSavePath); ini_set("session.save_path", $szSessSavePath); } clearstatcache(); // Check if save path is writable if (!(file_exists(session_save_path()) && is_writable(session_save_path()))){ die("FATAL ERROR: Session save path (".session_save_path().") doesn't exist or is not writable"); } $szTmpID = ""; // check both get and post variables debug_msg("Checking GPC for session ..."); if ( isset($GLOBALS['_COOKIE'][ini_get('session.name')]) ) { $szTmpID = $GLOBALS['_COOKIE'][ini_get('session.name')]; debug_msg("_COOKIE:".$GLOBALS['_COOKIE'][ini_get('session.name')]); } elseif (isset($GLOBALS['_GET'][ini_get('session.name')])) { $szTmpID = $GLOBALS['_GET'][ini_get('session.name')]; debug_msg("_GET:".$GLOBALS['_GET'][ini_get('session.name')]); } elseif (isset($GLOBALS['_POST'][ini_get('session.name')])) { $szTmpID = $GLOBALS['_POST'][ini_get('session.name')]; debug_msg("_POST:".$GLOBALS['_POST'][ini_get('session.name')]); } debug_msg("szTmpID:".$szTmpID); // create new if necessary if ( strlen( $szTmpID ) <= 0 ){ // create new and set IP flag if ( strlen( $szSessionID ) > 0 ){ $szTmpID = $szSessionID; } else { $szTmpID = uniqid(""); } $bNewSession = true; } else { $bNewSession = false; } // initialize flag variable $bSessionOK = true; if (!$bNewSession){ debug_msg("EXISTING Session"); } else { debug_msg("NEW Session"); } session_name($szSessName); $sessionID = session_id(); if(empty($sessionID)){ session_id( $szTmpID ); session_start(); } debug_msg($_SERVER['PHP_SELF']); register_shutdown_function( "session_write_close" ); return $bSessionOK; } function getSessionSavePath(){ $szReturn = ini_get("session.save_path")."/sess_".session_id()."/"; $szReturn = str_replace( "\\", "/", $szReturn ); return $szReturn; } function debug_msg( $szMsg ){ global $gSzSessionDebug; if($gSzSessionDebug){ list($usec, $sec) = explode(" ",microtime()); $ts = sprintf( "%s.%4d", date( "H:s", $sec), round( 10000 * $usec )); error_log($ts. " - ".$szMsg); } } } ?>