Logo classes.scriptsphp.org PHP

go to nav bar

Sessions

La classe Sessions réecrie le gestionnaire de sessions de PHP pour qu' il utilise une base de donnée pour le stockage des informations, à la place du sytème de fichiers utilisé par défaut.

Cette classe dispose également d' autres options, notemment la possibilité d' utiliser un Garbage Collector propre à la classe, ce qui permet de le configurer à votre convenance sans retoucher au php.ini ou encore la possibilité de sauvegarder une session (un environnement) pour une durée plus longue et configurable.

Les Méthodes

Exemples

  1. Utilisation classique
  2. Utilisation avec le Garbage Collector de la Classe

La Source

<?php

/*
CREATE TABLE sessions (
SESS_ID varchar(32) not null,
expire int(11) unsigned not null,
value text not null,
save int (1) unsigned not null,
PRIMARY KEY (SESS_ID),
KEY (expire),
key (save)
);
*/



// définir une des classes  d abstraction (MySQL , PGSQL , SQLite) ou DBfactrory (PHP 5)
class Sessions extends mysql {
    
    
// Infos de Connection a la base de donnée
    
var $Server 'localhost';
    var 
$User 'root';
    var 
$Password '';
    var 
$Base 'test';
    var 
$Table 'sessions';
    
    
// Utilisation du Garbage Collector de PHP
    // ou celui de la classe
    // Utile si vous n avez pas acces au php.ini
    // 0 : utilise le GC de PHP
    // 1 : utilise le GC de la classe (configurable)
    
var $Use_my_GC 0;
    
// Pourcentage par defaut d appel du GC
    
var $GC_probability 20;
    
    
// private
    
var $Expire;
    var 
$Expire_max;
    var 
$RGC_probability;
    var 
$SESS_ID '';
    var 
$Save 0;
    
    function 
Sessions($expire=3600$expiremax=360000) {
        
        
$this->Expire time() + (int)$expire;
        
$this->Expire_max time() - (int)$expiremax;
        
$this->Set_my_GC_probability($this->GC_probability);
        
        if(!
$this->connect($this->Server$this->User$this->Password$this->Base))
        die(
$this->return_error());
        
        
session_set_save_handler(
        array(&
$this's_open'),
        array(&
$this's_close'),
        array(&
$this's_read'),
        array(&
$this's_write'),
        array(&
$this's_destroy'),
        array(&
$this's_gc')
        );
    }
    
    function 
Load_my_GC() {
        
        
$this->Use_my_GC 1;
    }
    
    function 
Set_my_GC_probability($percent) {
        
        if(
$percent<|| $percent 100)
        return 
false;
        
        if(!@
ini_set('session.gc_probability'$percent))
        
$this->Use_my_GC 1;
        
        
$this->RGC_probability = (int)(100/$percent);
        
        return 
true;
    }
    
    function 
Save_environnement($s_id$expire=false) {
        if(
$expire) {
            @
setcookie('SESS_ID'$s_idtime()+$expire'/');
            
$Q "
            UPDATE $this->Table 
            SET expire = " 
. (time() + (int)$expire) . "  
            WHERE SESS_ID = '$s_id' "
;
        }
        else {
            @
setcookie('SESS_ID'$s_idtime()+$this->Expire_max'/');
            
$Q "
            UPDATE $this->Table 
            SET save = 1 
            WHERE SESS_ID = '$s_id' "
;
        }
        
        return 
$this->Send_Query($Q);
    }
    
    function 
Unset_environnement($sid) {
        
        
$Q "
        UPDATE $this->Table 
        SET save = 0 
        WHERE SESS_ID = '$s_id' "
;
        
        return 
$this->Send_Query($Q);
        
    }
    
    function 
Is_environnement($s_id) {
        
        
$Q "
        SELECT 1 FROM $this->Table 
        WHERE SESS_ID = '$s_id' "
;
        
        
$a $this->num_rows($this->Send_Query($Q));
        
        return 
$a;
    }
    
    
// ------------------------------------------------ //
    //                    PRIVATE METHODS               //
    // ------------------------------------------------ //
    
    
function s_open($s_path$s_name) {
        
        
        
//return false;
        
        
if($this->Use_my_GC)
        {
$this->My_GC();}
        return 
true;
    }
    
    function 
s_close() {
        
//$this->close($this->Link);
        
return true;
    }
    
    function 
s_read($s_id) {
        
$Q "
        SELECT value, save  
        FROM $this->Table 
        WHERE SESS_ID = '$s_id' "
;
        
        
$T $this->get_array($this->Send_Query($Q));
        
        return (string)
$this->_stripslashes($T['value']);
    }
    
    function 
s_write($s_id$value) {
        
$Q "
        INSERT INTO $this->Table 
        VALUES('$s_id', $this->Expire , '"
.$this->_addslashes($value)."', $this->Save) ";
        
        if(!
$this->Send_Query($Q)) {
            
$Q "
            UPDATE $this->Table 
            SET expire = $this->Expire, value = '"
.$this->_addslashes($value)."'  
            WHERE SESS_ID = '$s_id' "
;    
            
            return 
$this->Send_Query($Q);
        }
        return 
true;
    }
    
    function 
s_destroy($s_id) {
        
        
$Q "
        DELETE FROM $this->Table 
        WHERE SESS_ID = '$s_id' "
;
        
        return 
$this->Send_Query($Q);
    }
    
    function 
s_gc($maxlifetime) {
        
        if(!
$this->Use_my_GC) {
            
//echo 'GC';
            
return $this->GC();
        }
        else
        return 
true;
    }
    
    function 
_addslashes($value) {
        
        return 
get_magic_quotes_gpc() ? $value addslashes($value) ;
    }
    
    function 
_stripslashes($value) {
        
        return 
get_magic_quotes_runtime() ? $value stripslashes($value);
    }
    
    function 
GC() {
        
$Q "
        DELETE FROM $this->Table 
        WHERE expire < " 
time() ." AND save = 0 ";
        
//echo 'GC';
        
return $this->Send_Query($Q);
    }
    
    function 
My_GC() {
        
srand((double)microtime()*1000000);
        if(
=== rand(1, (int)$this->RGC_probability))
        return 
$this->GC();
        else
        return 
true;
    }
    
}
// end class

?>

Merci de ne pas suivre ce lien emails.

0.1861s | «»
PHP powered