PHP Classes
Icontem

File: my_session.class.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Ska-Man  >  My Session  >  my_session.class.php  
File: my_session.class.php
Role: Class source
Content type: text/plain
Description: The source of the class
Class: My Session
Database based session management
 

Contents

Class file image Download
<?
//  ----------------------------------------------------------------------
//    |    My Session By Marco Baldini (info [at] marcobaldini [dot] com)      |
//  ----------------------------------------------------------------------
// |    My session is a class that stores session data in a database rather |
// |    than files. This method in most secure that the default session     |
// |    system of PHP                                                       |
//  ----------------------------------------------------------------------        
// |    System Requirements: A web server that support PHP (at least 4.2.0  |
// |    for incoming PostreSQL support) and a DBMS up and running. If you   |
// |    chose MySQL you need at least MySQL 4.0.2.                          |
//  ----------------------------------------------------------------------        
// |  Tested on PHP 4.3.8 and MySql 4.1.3b                                |
//  ----------------------------------------------------------------------    
// |  ATTENTION: The support for PostgreSQL will be implemented in the    |
// |  next minor release (1.2.0).                                         |
//  ----------------------------------------------------------------------    
// | This class has been created and released under the GNU GPL and is    |
// | free to use and redistribute only if this whole header comments and  |
// | copyright statement are not removed. Author gives no warranties. Use |
// | at your own risk. Read the copyright, change log, howto and license. |
//  ----------------------------------------------------------------------

class my_session
{
    
var 
$session_id;
var 
$connessione;
var 
$_MYSESSION_CONF;
var 
$VARS = array();
var 
$forced_expire;
var 
$versione="1.1";
/*    
Invocazione:
require_once('config.DB_eSession.php');
require_once('class.DB_eSession.php');
$sessione = new my_session($_MYSESSION_CONF);
*/

//versione
function get_version() {        

    return 
$this->versione;    
    
}


//registra variabili
function get_var($nome) {            

    return 
$this->VARS["$nome"];
        
}

//registra variabili
function registra($nome,$valore) {            
        
        if (
$this->_MYSESSION_CONF['CRIPT']==1) {
        
            
$cond "AES_ENCRYPT('".$nome."','".$this->_MYSESSION_CONF['CRIPT_KEY']."')=".$this->_MYSESSION_CONF['NOME'];
            
        } else {

            
$cond $this->_MYSESSION_CONF['NOME']."='$nome'";
            
        }    
        
        
$cond .= " AND ".$this->_MYSESSION_CONF['SID']."='".$this->session_id."'";
        
        
$this->delete($this->_MYSESSION_CONF['TB_NAME'],$cond,$this->_MYSESSION_CONF['DB_DATABASE']);    
        
$this->insert($this->_MYSESSION_CONF['TB_NAME'],$this->_MYSESSION_CONF['DB_DATABASE'],$nome,$valore);
        
$this->get_variabili_di_sessione();
}

//deregistra variabili
function cancella($nome) {
        if (
$this->_MYSESSION_CONF['CRIPT']==1) {
        
            
$cond "AES_ENCRYPT('".$nome."','".$this->_MYSESSION_CONF['CRIPT_KEY']."')=".$this->_MYSESSION_CONF['NOME'];
            
        } else {

            
$cond $this->_MYSESSION_CONF['NOME']."='$nome'";
            
        }    
        
        
$cond .= " AND ".$this->_MYSESSION_CONF['SID']."='".$this->session_id."'";
            
        
$this->delete($this->_MYSESSION_CONF['TB_NAME'],$cond,$this->_MYSESSION_CONF['DB_DATABASE']);
        
$this->get_variabili_di_sessione();
}


//------COSTRUTTORE------------//
//costruttore PHP 4
function my_session($config) {
    
    
$this->__construct($config);
    
}

//costruttore PHP 5
function __construct($config) {

    
$this->_MYSESSION_CONF=$config;
        
    
$this->db_connection();
    
    
$this->sessionid();
    
    
//echo "<hr>".$this->session_id."<hr>";
    
    
if ($this->controllo_expire_forzato()) $this->destroy();
    
    
$_REQUEST[$this->_MYSESSION_CONF['SESSION_VAR_NAME']]=$this->session_id;

}


//---------DISTRUTTORE----------//
//distruttore PHP4
function destroy() {
    
    
$this->__destruct();
    
}
//distruttore PHP5
function __destruct() {

    
//elimino le variabili di sessione da DB
    
$cond=$this->_MYSESSION_CONF['SID']."='".$this->session_id."'";
    
$tabelle=$this->_MYSESSION_CONF['TB_NAME'];

    
$this->delete($this->_MYSESSION_CONF['TB_NAME'],$cond,$this->_MYSESSION_CONF['DB_DATABASE']);    

}

//------FUNZIONI PRIVATE-------//
function controllo_expire_forzato() {    
    
    if (
time()>$this->forced_expire) return 0;
        else return 
1;    
}


function 
get_variabili_di_sessione() {
    
    
$this->VARS = array();
    
    
$cond=$this->_MYSESSION_CONF['SID']."= '".$this->session_id."'";
    
$tabelle=$this->_MYSESSION_CONF['TB_NAME'];
    
    
//aggiorno la scadenza della sessione
    
$campi_upd=$this->_MYSESSION_CONF['EXP']."=".(time()+($this->_MYSESSION_CONF['DURATA']));

    
$this->update($campi_upd,$tabelle,$cond,$this->_MYSESSION_CONF['DB_DATABASE']);
    
    
//prelevo le variabili e le metto bell'array VARS        
        
if ($this->_MYSESSION_CONF['CRIPT']==1) {
        
            
$campi="AES_DECRYPT(".$this->_MYSESSION_CONF['VALORE'].",'".$this->_MYSESSION_CONF['CRIPT_KEY']."') as valore, AES_DECRYPT(".$this->_MYSESSION_CONF['NOME'].",'".$this->_MYSESSION_CONF['CRIPT_KEY']."') as nome";
            
        } else {

            
$campi=$this->_MYSESSION_CONF['VALORE']." as valore, ".$this->_MYSESSION_CONF['NOME']." as nome";            
        }        
        
    
$r=$this->select($campi,$tabelle,$cond,$this->_MYSESSION_CONF['DB_DATABASE']);
    
    while (
$dati=mysql_fetch_array($r)) {
    


        
$this->VARS[$dati["nome"]]=$dati["valore"];
        
    }
}



//cerco l'id della sessione, se non lo trovo lo creo nuovo
function sessionid() {

    if (
$this->_MYSESSION_CONF['USE_COOKIE']==true) { //cookie abilitati
        
        
if (isset($_COOKIE[$this->_MYSESSION_CONF['SESSION_VAR_NAME']])) { // il cookie contiene qualcosa
            
            
$this->session_id=$_COOKIE[$this->_MYSESSION_CONF['SESSION_VAR_NAME']];
            
        } else { 
// cerco l'ID tra i request
            
            
if (isset($_REQUEST[$this->_MYSESSION_CONF['SESSION_VAR_NAME']])) {//essite un id in request!
                
                
$this->session_id    $_REQUEST[$this->_MYSESSION_CONF['SESSION_VAR_NAME']];
                
$this->get_variabili_di_sessione();
                
            } else { 
// creo il nuovo ID e lo piazzo nel cookie
                
$this->new_sid();
                
setcookie ($this->_MYSESSION_CONF['SESSION_VAR_NAME'], $this->session_id,time()+$this->_MYSESSION_CONF['DURATA']);    
            }
            
        }
        
    } else { 
//cerco altrove

            
if (isset($_REQUEST[$this->_MYSESSION_CONF['SESSION_VAR_NAME']])) {//esiste l'id!
                
                
$this->session_id    $_REQUEST[$this->_MYSESSION_CONF['SESSION_VAR_NAME']];
                
$this->get_variabili_di_sessione();
                
            } else { 
// creo il nuovo ID
                
                
$this->new_sid();            
                
            }
        
    }    
    
}

//funzione per creare un nuovo id di sessione univoco
function new_sid() {
    
    
$this->session_id=$this->genera_stringa();
    
    while ( 
$this->get_num($this->_MYSESSION_CONF['SID'],$this->_MYSESSION_CONF['TB_NAME'],$this->_MYSESSION_CONF['DB_DATABASE'],$this->session_id) > ) {
    
        
$this->session_id=$this->genera_stringa();
        
    }

    
$this->forced_expire time()+ $this->_MYSESSION_CONF['MAX_DURATA'];
    
}

//generero una stringa casuale
function genera_stringa()
{
    
     
$alfabeto="qazxswedcvfrtgbnhyujmklpoi0987654321";
     
$ris='';
    
    for (
$i=0$i $this->_MYSESSION_CONF['SID_LEN']; $i++) {
        
srand($this->make_seed());        
        
$ris .= $alfabeto[rand(0,(strlen($alfabeto)-1))];
    }
    
    return(
$ris);
}

//funzione casuale per l'inizializzazione del generatore di numeri casuali
function make_seed()
{
   list(
$usec$sec) = explode(' 'microtime());
   return (float) 
$sec + ((float) $usec 100000);
}

//connessione al database mysql
function db_connection() {

if (!
is_resource($this->connessione))
    
$this->connessione mysql_pconnect($this->_MYSESSION_CONF['DB_SERVER'],$this->_MYSESSION_CONF['DB_USERNAME'],$this->_MYSESSION_CONF['DB_PASSWORD']) or die("Connessione non riuscita: " mysql_error());
    
}

//--------------------FUNZIONI MYSQL

//Numero dei risultati 
function get_num($campo,$tab,$db,$valore) {
    
    
$query="select count(*) from $db.$tab where $campo = '$valore'";    
    
//echo "<hr>$query<hr>";
    
$val=mysql_result(mysql_query($query,$this->connessione),0,0);    
    return 
$val;
    
}

//select
function select($campi,$tabelle,$cond,$db) {

    
$query="SELECT $campi FROM $db.$tabelle WHERE $cond";
    
//echo "<hr>$query<hr>";
    
$val=mysql_query($query,$this->connessione) or die("Sel:".mysql_error());
    
    return 
$val;

}

//update
function update($campi,$tabelle,$cond,$db) {
    
    
$query="UPDATE $db.$tabelle SET $campi WHERE $cond";
    
//echo "<hr>$query<hr>";
    
$val=mysql_query($query,$this->connessione) or die("Upd:".mysql_error());
    
    return 
$val;

}

//delete
function delete($tabelle,$cond,$db) {
    
    
$query="DELETE FROM $db.$tabelle WHERE $cond";
    
//echo "<hr>$query<hr>";
    
$val=mysql_query($query,$this->connessione) or die("Del:".mysql_error());
    
    return 
$val;

}

//insert
function insert($tabelle,$db,$nome,$val) {
    
    if (
$this->_MYSESSION_CONF['CRIPT']==1) {
        
$nome"AES_ENCRYPT('".$nome."','".$this->_MYSESSION_CONF['CRIPT_KEY']."')";
        
$val"AES_ENCRYPT('".$val."','".$this->_MYSESSION_CONF['CRIPT_KEY']."')";
    } else {
        
$nome"'".$nome."'";
        
$val"'".$val."'";
    }
    
    
$query="INSERT INTO $db.$tabelle (sid,expires,nome,valore) VALUES ('".$this->session_id."','".(time()+$this->_MYSESSION_CONF['DURATA'])."',$nome,$val)";
    
//echo "<hr>$query<hr>";
    
$val=mysql_query($query,$this->connessione) or die("Ins:".mysql_error());
    
    return 
$val;

}

//--------------------    
}
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products