sto impazzendo a costruire un gestore di sessioni personalizzato, ma se con php5 funziona benissimo, con php4 va a metà e non capisco cosa sia sbagliato...

questa è la versione MOLTO tartassata della classe che stavo facendo.

VA DETTO però, che la uso "dentro" un'altra classe figlia, da cui chiamo il metodo start...

è forse una diversità tra i 2 php??? in php4 il metodo write non funziona, quindi non scrive le sessioni!...

sapete aiutarmi?

Codice PHP:
<?php


    
class session
    
{
    
#    var $id; #id di sessione #private (non serve, c'è già session_id)
    #    var $info = ''; #dati di sessione,togli! #private
        
var $path ''#dir dei dati #protected
        
var $name 'userid'#nome sessione ALFANUMERICO!(al posto di PHPSESSID) #private const (es. self::name)
        
var $life '1 day'#massima inattività (gc) #private const (es. self::life)
        
var $srcfile#handle per fopen o db sqlite (usare id???)
        
        // prototipo di file sessione: 569s7dd4567gd3f5g6ga725.userid
        
        
function session() # __construct
        
{
    
#        ini_set('session.use_cookies', '1'); // ???
    #        ini_set('session.save_handler', 'files');
    #        ini_set('session.gc_maxlifetime', strtotime($this->life, 0));
            
        #    session_name($this->name); # parametro usato dalle funzioni
        #    session_save_path(''); # parametro usato dalle funzioni
            
            
        
}
        
        function 
start() #protected
        
{
        
#    ini_set('session.use_cookies', '1'); // ???
        #    ini_set('session.save_handler', 'files');
            
ini_set('session.gc_maxlifetime'strtotime($this->life0));
            
            
session_name($this->name); # parametro usato dalle funzioni
            
session_save_path($this->path); # parametro usato dalle funzioni
            
            
session_set_save_handler
            
(    array(&$this'open')
            ,    array(&
$this'close')
            ,    array(&
$this'read')
            ,    array(&
$this'write')
            ,    array(&
$this'destroy')
            ,    array(&
$this'gc')
            );
            
            
register_shutdown_function('session_write_close');
            
            
session_start();
        }
        
        
#----- "Safe mode" for (un)registering session variables ------#
        
function set($s_var$value null#public final
        
{
            if (
$value !== null)
                
                
$_SESSION[$s_var] = $value;
            
            else unset(
$_SESSION[$s_var]);
            
            return 
true;
        }
        
        
#----- "Safe mode" for reading session variables ------#
        
function get($s_var ''#public final
        
{
            if (!
$s_var) return empty($_SESSION);
            
            return 
array_key_exists($s_var$_SESSION) ? $_SESSION[$s_var] : null;
        }
        
        
        
        function 
open($s_path$s_name#private final
        
{
        
#    $this->id = session_id();
            
$this->srcfile sprintf('%s/%s.%s'$s_pathsession_id(), $s_name);
            echo 
'FILE = '.$this->srcfile;
            
# CREARE FILE SE NON ESISTE!
            // trova il più veloce: file_exists, file, is_file.
            
if(!file_exists($this->srcfile))
            {
                
$f fopen($this->srcfile'w');
                
fclose($f);
            }
            
            
# @return: TRUE | FALSE
            
return true;
        }
        
        function 
close() #private final
        
{
            return 
true;
            
            
# @return: TRUE | FALSE
            # chiama gc()
        
}
        
        function 
read($s_id#private final
        
{
            
$s_data file_get_contents($this->srcfile);
            echo 
'dati letti = '.$s_data;
            return 
'';#($s_data) ? $s_data : '';
            
            # @return: datastring oppure ''
        
}
        
        function 
write($s_id$s_data#private final
        
{
        
#    echo 'dati scritti = '.$s_data;
            
            
$handle fopen($this->srcfile'wb');
            
fseek($handle0);
            
fwrite($handle$s_data);
            
fclose($handle);
            
        
#    return file_put_contents($this->srcfile, $s_data) ? true : false;
            
            //scrive $data
            # @return: TRUE | FALSE
        
}
        
        function 
destroy($s_id#private final
        
{
            return 
unlink($this->srcfile);
            
            
# @return: TRUE | FALSE
        
}
        
        function 
gc($s_maxlifetime#private final
        
{/*
            foreach (glob($this->path.'*.'.$this->name) as $file)
                
                if (time()-fileatime($file) > $s_maxlifetime)
                    
                    if (!unlink($file)) { break; return false; }
            
            clearstatcache();
            */
            
return true;
            
            
# @return: TRUE | FALSE
        
}
    }
#echo 'ciao'.time().'
';
$sess = &new session;

$sess->start();
#session_destroy();
if(!empty($_GET['
sess'])) $sess->set($_GET['sess'], $_GET['sessv']);
#echo $sess->set('
false', 'ciao');

print_r($_SESSION);

?>