0 && $fp = @fopen($sess_file, "r") ) { $sess_data = fread($fp, filesize($sess_file)); return($sess_data); } else return(""); // Must return "" here. } // writes session data static function write($id, $sess_data) { $dir = Session::getDir( $id ); if( !file_exists( $dir ) ) { if( mkdir( $dir, 0775, true ) ) { trigger_error( 'Created new session folder for ' . $id . ', from: ' . $_SERVER['PHP_SELF'] ); if( !chmod( $dir, 0775 ) ) trigger_error( 'Unable to set permissions on new session folder ' . $dir ); } else trigger_error( 'Unable to create new session folder for ' . $id . ', from: ' . $_SERVER['PHP_SELF'] ); } $sess_file = Session::getDataFile( $id ); if ($fp = fopen($sess_file, 'w')) { return(fwrite($fp, $sess_data)); } else { if( file_exists( $sess_file ) ) { if( chmod( $sess_file, 0775 ) ) trigger_error( 'Error writing session file, fixed permissions ' . $sess_file ); else trigger_error( 'Error writing session file, unable to fix permissions ' . $dir ); } else trigger_error( 'Unable to create session file ' . $sess_file ); return false; } } // called for session_destroy() static function destroy($id) { $dir = self::getDir($id); $files = scandir( $dir ); foreach( $files as $file ) unlink( $file ); return rmdir( $dir ); /* $sess_file = Session::getDataFile($id); echo "destroy[$sess_file]\n"; return(@unlink($sess_file)); */ } // garbage collection routine (called periodically, based on a set probability) static function gc($maxlifetime) { $dirs = glob( self::getBaseDir() . '*' ); $del = 0; for( $i = count( $dirs ) - 1; $i >= 0; $i-- ) { if( ( time() - filemtime( $dirs[$i] . '/' . self::$DATAFILE ) ) / 60 > 60 ) { // older than 1 hour, delete $files = glob( $dirs[$i] . '/*' ); for( $j = count( $files ) - 1; $j >= 0; $j-- ) unlink( $files[$j] ); rmdir( $dirs[$i] ); $del++; } } trigger_error( 'Session GC called. Total sessions: ' . count( $dirs ) . ', Deleted: ' . $del ); return true; } } // initialize class and session // need to use this weird array style to use static methods (see bottom comment on PHP docs for session_set_save_handler) ini_set( 'session.gc_probability', 10 ); session_set_save_handler( array("Session", "open"), array("Session", "close"), array("Session", "read"), array("Session", "write"), array("Session", "destroy"), array("Session", "gc") ); session_start(); ?>