[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Agora1-4/ -> inc-session.php (source)

   1  <?php
   2  /******* Fichier Ajout? EXTRANET guillaume.grason@diplomatie.gouv.fr *******/
   3  //
   4  // Ce fichier ne sera execute qu'une fois
   5  if (defined("_INC_SESSION")) return;
   6  define("_INC_SESSION", "1");
   7  
   8  
   9  
  10  /*
  11   * Gestion de l'authentification par sessions
  12   * a utiliser pour valider l'acces (bloquant)
  13   * ou pour reconnaitre un utilisateur (non bloquant)
  14   *
  15   */
  16  
  17  $GLOBALS['extranaute_session'] = '';
  18  
  19  //
  20  // On verifie l'IP et le nom du navigateur
  21  //
  22  function hash_env_ex() {
  23      global $HTTP_SERVER_VARS;
  24      return md5($HTTP_SERVER_VARS['REMOTE_ADDR'] . $HTTP_SERVER_VARS['HTTP_USER_AGENT']);
  25  }
  26  
  27  
  28  //
  29  // Calcule le nom du fichier session
  30  //
  31  function fichier_session_ex($id_session, $alea) {
  32      if (ereg("^([0-9]+_)", $id_session, $regs))
  33          $id_extranaute = $regs[1];
  34      $fichier_session = 'session_ex_'.$id_extranaute.md5($id_session.' '.$alea).'.php';
  35      $fichier_session = dirname(__FILE__).'/ecrire/data/'.$fichier_session;
  36      return $fichier_session;
  37  }
  38  
  39  //
  40  // Ajouter une session pour l'extranaute specifie
  41  //
  42  function ajouter_session_ex($extranaute, $id_session) {
  43      if (isset($_SESSION['AgoraRubriquesCache'])) {
  44          session_destroy();
  45      }
  46      $fichier_session = fichier_session_ex($id_session, lire_meta('alea_ephemere'));
  47      $vars = array('id_extranaute', 'nom', 'login', 'email', 'ip_change', 'hash_env');
  48  
  49      $texte = "<"."?php\n";
  50      reset($vars);
  51      while (list(, $var) = each($vars)) {
  52          $texte .= "\$GLOBALS['extranaute_session']['$var'] = '".addslashes($extranaute[$var])."';\n";
  53      }
  54      $texte .= "?".">\n";
  55      if ($f = fopen($fichier_session, "wb")) {
  56          fputs($f, $texte);
  57           fclose($f);
  58      } else {
  59          @Header("spip_test_dirs.php");
  60      }
  61  }
  62  
  63  //
  64  // Verifier et inclure une session
  65  //
  66  function verifier_session_ex($id_session) {
  67      require_once (dirname(__FILE__).'/ecrire/include/utils/meta.php'); 
  68      // Tester avec alea courant
  69      $ok = false;
  70      if ($id_session) {
  71          $fichier_session = fichier_session_ex($id_session, lire_meta('alea_ephemere'));
  72          if (file_exists($fichier_session)) {
  73              include($fichier_session);
  74              $ok = true;
  75          }
  76          else {
  77              // Sinon, tester avec alea precedent
  78              $fichier_session = fichier_session_ex($id_session, lire_meta('alea_ephemere_ancien'));
  79              if (file_exists($fichier_session)) {
  80                  // Renouveler la session (avec l'alea courant)
  81                  include($fichier_session);
  82                  supprimer_session_ex($id_session);
  83                  ajouter_session_ex($GLOBALS['extranaute_session'], $id_session);
  84                  $ok = true;
  85              }
  86          }
  87      }
  88  
  89      // marquer la session comme "ip-change" si le cas se presente
  90      if ($ok AND (hash_env_ex() != $GLOBALS['extranaute_session']['hash_env']) AND !$GLOBALS['extranaute_session']['ip_change']) {
  91          $GLOBALS['extranaute_session']['ip_change'] = true;
  92          ajouter_session_ex($GLOBALS['extranaute_session'], $id_session);
  93      }
  94  
  95      return $ok;
  96  }
  97  
  98  //
  99  // Supprimer une session
 100  //
 101  function supprimer_session_ex($id_session) {
 102      if (isset($_SESSION['AgoraRubriquesCache'])) {
 103          session_destroy();
 104      }
 105      $fichier_session = fichier_session_ex($id_session, lire_meta('alea_ephemere'));
 106      if (file_exists($fichier_session)) {
 107          @unlink($fichier_session);
 108      }
 109      $fichier_session = fichier_session_ex($id_session, lire_meta('alea_ephemere_ancien'));
 110      if (file_exists($fichier_session)) {
 111          @unlink($fichier_session);
 112      }
 113  }
 114  
 115  //
 116  // Creer une session et retourne le cookie correspondant (a poser)
 117  //
 118  function creer_cookie_session_ex($extranaute) {
 119      if ($id_extranaute = $extranaute['id_extranaute']) {
 120          $id_session = $id_extranaute.'_ex_'.md5(creer_uniqid_ex());
 121          $extranaute['hash_env'] = hash_env_ex();
 122          ajouter_session_ex($extranaute, $id_session);
 123          return $id_session;
 124      }
 125  }
 126  
 127  //
 128  // Creer un identifiant aleatoire
 129  //
 130  function creer_uniqid_ex() {
 131      static $seeded;
 132  
 133      if (!$seeded) {
 134          $seed = (double) (microtime() + 1) * time();
 135          mt_srand($seed);
 136          srand($seed);
 137          $seeded = true;
 138      }
 139  
 140      $s = mt_rand();
 141      if (!$s) $s = rand();
 142      if ($GLOBALS['flag_uniqid2'])
 143          return uniqid($s, 1);
 144      else
 145          return uniqid($s);
 146  }
 147  
 148  
 149  //
 150  // Cette fonction efface toutes les sessions appartenant a l'extranaute
 151  // On en profite pour effacer toutes les sessions creees il y a plus de 48 h
 152  //
 153  function zap_sessions_ex($id_extranaute, $zap) {
 154      $dirname = dirname(__FILE__).'/ecrire/data/';
 155  
 156      if ($s = $GLOBALS['spip_session_ex'])
 157          $fichier_session = fichier_session_ex($s, lire_meta('alea_ephemere'));
 158  
 159      $dir = opendir($dirname);
 160      $t = time();
 161      while(($item = readdir($dir)) != '') {
 162          $chemin = "$dirname$item";
 163          if (ereg("^session_ex_([0-9]+_)?([a-z0-9]+)\.php$", $item, $regs)) {
 164  
 165              // Si c'est une vieille session, on jette
 166              if (($t - filemtime($chemin)) > 48 * 3600)
 167                  @unlink($chemin);
 168  
 169              // sinon voir si c'est une session du meme extranaute
 170              else if ($regs[1] == $id_extranaute.'_') {
 171                  $zap_num ++;
 172                  if ($zap)
 173                      @unlink($chemin);
 174              }
 175  
 176          }
 177      }
 178  
 179      return $zap_num;
 180  }
 181  
 182  //
 183  // verifie si on a un cookie de session ou un auth_php correct
 184  // et charge ses valeurs dans $GLOBALS['extranaute_session']
 185  //
 186  function verifier_visiteur_ex() {
 187      if (verifier_session_ex($GLOBALS['HTTP_COOKIE_VARS']['spip_session_ex']))
 188          return true;
 189      return false;
 190  }
 191  
 192  ?>


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7