Logo classes.scriptsphp.org PHP

go to nav bar

krillsession

La classe krillsession fournit une alternative à la solution de session integrée à php.

nc.

Les Méthodes

  • SESSION - Nouvelle Instance
  • create - Créer une nouvelle session
  • register - enregistrer une nouvelle variable de session
  • unregister - Détruit la variable qui a pour nom var de la session courante.
  • unregister_all - Détruit toutes les variables de la session courante.
  • is_registered - Indique si la variable est enregistrée.
  • destroy - Détruit la session courante.

Exemples

  1. Exemple simple

La Source

<?php

############################################ Présentation ################################################
# Nom de la classe : SESSION                                                                             #
# Version :          1.0 (dernière modification le 18/07/2003)                                           #
# Description :      Classe permettant de gérer les session en PHP.                                      #
# Compatibilité :    PHP 4.1.0 et plus.                                                                  #
# Auteur :           Krill (guillaume.delbar@worldonline.fr).                                            #
# Copyright :        License GPL                                                                         #
##########################################################################################################



class SESSION
{
      
####################################################################################################
      #                                Propriétés statiques à configurer                                 #
      ####################################################################################################
      //Répertoire de sauvegarde des fichiers de session (ne doit pas être accessible depuis le web !!)
      
var $save_path "C:\\tmp";

      
//Taille limite (en Ko) de l'ensemble des fichiers de session au delà de laquelle on épure les
      //fichiers de session obsolètes.
      
var $max_save_path_size 10;

      
//Temps maximum (en mn) d'inactivité entre 2 accès
      
var $inactivity_timeout 120;

      
//Temps maximum (en mn) disponible pour une session
      
var $global_timeout 720;

      
//Nom de l'identifiant de session
      
var $id_name "SESS_ID";

      
//Spécifie si le cookie enregistré chez le client est un cookie de session (non permanent) ou un
      //cookie permanent (d'une durée de vie égale à $global_timeout).
      
var $is_session_cookie true;



      
####################################################################################################
      #                                Propriétés à utiliser dans vos scripts                            #
      ####################################################################################################
      //Tableau contenant toutes les variables de session de l'utilisateur. Toutes les manipulations de
      //variables (ajout, suppression, modification) peuvent se faire via ce tableau
      
var $value;

      
//Identifiant de session. A noter que modifier la valeur de cette propriété n'a aucun impact sur
      //la valeur réelle de l'identifiant de session.
      
var $id;



      
####################################################################################################
      #                               Propriétés privées gérées par la classe                            #
      ####################################################################################################
      
var $timeout_array;        // Tableau contenant les variables de timeout
      
var $save_path_size;       // Taille du répertoire des fichiers de session
      
var $is_save;              // Spécifie si on doit sauvegarder la session à la fin du script



      ####################################################################################################
      #                               Méthodes publics à utiliser directement                            #
      ####################################################################################################
      ////////////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void SESSION(void)
      // Description : constructeur de la classe : initialise les propriétés gérées par la classe,
      //               nettoie éventuellement le répertoire des fichiers de session et initialise
      //               la session via la méthode start. A l'issue de l'instanciation, la constante
      //               SESSION_STATUT est initialisée et peut prendre les valeurs suivantes :
      //
      //                    -> ACTIVE : l'utilisateur a une session active sur le serveur
      //                    -> NONE : l'utilisateur n'a pas de session active sur le serveur
      //                    -> NONE_ID_ERR : l'utilisateur n'a pas de session active sur le serveur
      //                                     et a envoyé un identifiant de session non valide
      //                                     (tentative de piratage ??)
      //                    -> NONE_FILE_ERR : l'utilisateur n'a plus de session active sur le serveur
      //                                       car il n'y a plus de fichier de session
      //                    -> NONE_TIMEOUT_ERR : l'utilisateur n'a plus de session active sur le serveur
      //                                          car sa session a expiré
      //
      //               A noter que dans le cas de NONE_ID_ERR, NONE_FILE_ERR et NONE_TIMEOUT_ERR, on ne
      //               pas recréer de session dans le script courant (à cause du cookie).
      // Remarque :    L'appel à une nouvelle instance de la classe doit se faire par référence
      //               pour permettre la sauvegarde des modifications dans $this->value en fin de script.
      ////////////////////////////////////////////////////////////////////////////////////////////////////
      
function SESSION()
      {
             
//Initialisation de $this->timeout_array et $this->is_save
             
$this->timeout_array = array();
             
$this->is_save false;

             
//Initilisation de  $this->save_path_size
             
$this->save_path_size $this->dir_size();

             
//Nettoyage éventuel du répertoire des fichiers de session
             
if($this->save_path_size $this->max_save_path_size)
             {
                    
$this->clean_dir();
             }

             
//Démarrage de la session (initialisation de $this->value et $this->id)
             
$this->start();

             
//Enregistre automatiquement les modifications dans $this->value à la fin du script
             
register_shutdown_function(array(&$this'save'));
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void create(void)
      // Description : Crée une nouvelle session. Si une session existe déjà, cette méthode sera
      //               sans effet.
      // Remarque :    -
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function create()
      {
             if(
SESSION_STATUT == "NONE")
             {
                  
$this->id md5(uniqid(rand()));

                  if(
$this->is_session_cookie)
                  {
                       
setcookie($this->id_name$this->id);
                  }
                  else
                  {
                       
setcookie($this->id_name$this->idtime()+$this->global_timeout*60);
                  }

                  
$this->value = array();
                  
$this->timeout_array["SESSION_FIRST_ACCESSED"] = time();
                  
$this->timeout_array["SESSION_LAST_ACCESSED"] = time();

                  
$this->is_save true;
             }
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         boolean register(string name_var [, mixed content_var])
      // Description : Enregistre la variable qui a pour nom name_var dans la session courante.
      //               Si content_var n'est pas précisé, la variable contiendra le contenu de la
      //               variable globale name_var, sinon le contenu de content_var.
      // Remarque :    équivalent à : $this->value[$name_var] = $content_var;
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function register($name_var$content_var="")
      {
             if(
func_num_args() == and isset($GLOBALS[$name_var]))
             {
                 
$this->value[$name_var] = $GLOBALS[$name_var];
                 return 
true;
             }
             elseif(
func_num_args() == 2)
             {
                 
$this->value[$name_var] = $content_var;
                 return 
true;
             }
             return 
false;
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void unregister(string name_var)
      // Description : Détruit la variable qui a pour nom var de la session courante.
      // Remarque :    équivalent à : unset($this->value[$name_var]);
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function unregister($name_var)
      {
             unset(
$this->value[$name_var]);
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void unregister_all(void)
      // Description : Détruit toutes les variables de la session courante.
      // Remarque :    équivalent à : unset($this->value);
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function unregister_all()
      {
             unset(
$this->value);
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         boolean is_registered(string var)
      // Description : Indique si la variable qui a pour nom var est enregistrée dans la session
      //               courante
      // Remarque :    équivalent à : isset($this->value[$var]);
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function is_registered($var)
      {
             return isset(
$this->value[$var]);
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void destroy(void)
      // Description : Détruit la session courante (variables, fichier de session et cookie). La
      //               destruction prend effet immédiatement en ce qui concerne les variables et le
      //               fichier de session, la valeur du cookie étant encore disponible jusqu'à la
      //               fin du script.
      // Remarque :    -
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function destroy()
      {
             
clearstatcache();
             if(
file_exists($this->save_path."/session_".$this->id))
             {
                 
unlink($this->save_path."/session_".$this->id);
             }

             unset(
$this->value);

             if(isset(
$_COOKIE[$this->id_name]))
             {
                 
setcookie($this->id_name"");
             }

             
$this->is_save false;
      }



      
####################################################################################################
      #                             Méthodes privées utilisées par la classe                             #
      ####################################################################################################
      //////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void start(void)
      // Description : Crée, poursuit ou détruit la session courante en fonction du contexte
      // Remarque :    A ne pas utiliser, méthode privée
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function start()
      {
             
//Si aucun identifiant n'a été envoyé, on quitte
             
if(!isset($_COOKIE[$this->id_name]))
             {
                  
define("SESSION_STATUT""NONE");
                  return;
             }
             
//Sinon on initialise $this->id
             
else
             {
                  
$this->id $_COOKIE[$this->id_name];
             }

             
//Test sur le format de l'identifiant de session
             
if(strlen($this->id) != 32 or !ereg("[a-z0-9]{32}",$this->id))
             {
                  
$this->destroy();
                  
define("SESSION_STATUT""NONE_ID_ERR");
                  return;
             }

             
//Test de l'existence du fichier de session
             
clearstatcache();
             if(!
file_exists($this->save_path."/session_".$this->id))
             {
                  
$this->destroy();
                  
define("SESSION_STATUT""NONE_FILE_ERR");
                  return;
             }

             
//On récupère les variables de session
             
clearstatcache();
             
$fp fopen($this->save_path."/session_".$this->id,"r");
             
$this->value unserialize(fread($fp,filesize($this->save_path."/session_".$this->id)));
             
fclose($fp);

             
//Test des timeout
             
if((time() - $this->inactivity_timeout*60) > $this->value["SESSION_LAST_ACCESSED"] or (time() - $this->global_timeout*60) > $this->value["SESSION_FIRST_ACCESSED"])
             {
                  
$this->destroy();
                  
define("SESSION_STATUT""NONE_TIMEOUT_ERR");
                  return;
             }

             
//Enregistrement des timeout dans $timeout_array
             
$this->timeout_array["SESSION_FIRST_ACCESSED"] = $this->value["SESSION_FIRST_ACCESSED"];
             
$this->timeout_array["SESSION_LAST_ACCESSED"] = time();

             
//Définition du statut de la session
             
define("SESSION_STATUT""ACTIVE");
             
$this->is_save true;
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void save(void)
      // Description : Enregistre les modifications effectuée dans le tableau $this->value
      // Remarque :    A ne pas utiliser, méthode privée
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function save()
      {
             if(
$this->is_save)
             {
                   
$this->value["SESSION_LAST_ACCESSED"] = $this->timeout_array["SESSION_LAST_ACCESSED"];
                   
$this->value["SESSION_FIRST_ACCESSED"] = $this->timeout_array["SESSION_FIRST_ACCESSED"];
                   
$fp fopen($this->save_path."/session_".$this->id"w");
                   
fwrite($fpserialize($this->value));
                   
fclose($fp);
             }
      }

      
//////////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         float dir_size(void)
      // Description : Renvoie la taille de l'ensemble des fichiers de session
      // Remarque :    A ne pas utiliser, méthode privée
      //////////////////////////////////////////////////////////////////////////////////////////////
      
function dir_size()
      {
             
$dp opendir($this->save_path);
             
$size 0;

             while(
$file readdir($dp))
             {
                  if(
$file != "." and $file != ".." and ereg("^session_",$file))
                  {
                      
clearstatcache();
                      
$size += filesize($this->save_path."/".$file);
                  }
             }

             
closedir($dp);
             return 
round($size/1024,2);
      }

      
////////////////////////////////////////////////////////////////////////////////////////
      // Nom :         void clean_dir(void)
      // Description : Supprime les fichiers de session obsolètes
      // Remarque :    A ne pas utiliser, méthode privée
      ////////////////////////////////////////////////////////////////////////////////////////
      
function clean_dir()
      {
          
$dp opendir($this->save_path);

          while(
$file readdir($dp))
          {
               if(
$file != "." and $file != ".." and ereg("^session_",$file))
               {
                    
clearstatcache();
                    
$fp fopen($this->save_path."/".$file,"r");
                    
$content_array unserialize(fread($fp,filesize($this->save_path."/".$file)));
                    
fclose($fp);

                    if((
time() - $this->inactivity_timeout*60) > $content_array["SESSION_LAST_ACCESSED"] or (time() - $this->global_timeout*60) > $content_array["SESSION_FIRST_ACCESSED"])
                    {
                        
unlink($this->save_path."/".$file);
                    }
               }
          }

          
closedir($dp);
    }

}

?>

Merci de ne pas suivre ce lien emails.

0.2374s | «»
PHP powered