[ Index ]
 

Code source de SPIP Agora 1.4

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

title

Body

[fermer]

/Agora1-4/ecrire/ -> inc_session.php (source)

   1  <?php
   2  /*****************************************************
   3  * This file is part of Agora, web based content management system.
   4  *
   5  * Agora is free software; you can redistribute it and/or modify
   6  * it under the terms of the GNU General Public License as published by
   7  * the Free Software Foundation; version 2 of the License.
   8  *
   9  * Agora is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details (file "COPYING").
  13  *
  14  * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière.
  15  * List of authors detailed in "copyright_fr.html" file.
  16  * E-mail : agora@sig.premier-ministre.gouv.fr
  17  * Web site : http://www.agora.gouv.fr
  18  *****************************************************/
  19  // Ce fichier ne sera execute qu'une fois
  20  if (defined("_ECRIRE_INC_SESSION"))
  21      return;
  22  
  23  define("_ECRIRE_INC_SESSION", "1");
  24  
  25  /*
  26   * Gestion de l'authentification par sessions
  27   * a utiliser pour valider l'acces (bloquant)
  28   * ou pour reconnaitre un utilisateur (non bloquant)
  29   *
  30   */
  31  
  32  $GLOBALS['auteur_session'] = '';
  33  
  34  //
  35  // On verifie l'IP et le nom du navigateur
  36  //
  37  function hash_env () {
  38      global $HTTP_SERVER_VARS;
  39      return md5($HTTP_SERVER_VARS['REMOTE_ADDR']. $HTTP_SERVER_VARS['HTTP_USER_AGENT']);
  40  }
  41  
  42  //
  43  // Calcule le nom du fichier session
  44  //
  45  function fichier_session ($id_session, $alea) {
  46      if (ereg("^([0-9]+_)", $id_session, $regs))
  47          $id_auteur = $regs[1];
  48  
  49      $fichier_session = 'session_' . $id_auteur . md5($id_session . ' ' . $alea). '.php';
  50      //$fichier_session = 'data/'.$fichier_session;
  51      //if (!$GLOBALS['flag_ecrire']) $fichier_session = 'ecrire/'.$fichier_session;
  52      $fichier_session = dirname(__FILE__). '/data/' . $fichier_session;
  53      return $fichier_session;
  54  }
  55  
  56  //
  57  // Ajouter une session pour l'auteur specifie
  58  //
  59  function ajouter_session ($auteur, $id_session) {
  60      /********* Modification maciek@clever-age.com ***********************/
  61      if (isset($_SESSION['AgoraRubriquesCache'])) {
  62          session_destroy();
  63      }
  64      /********* Fin modification maciek@clever-age.com ***********************/
  65      $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere'));
  66      $vars = array('id_auteur', 'nom', 'login', 'email', 'statut', 'profil', 'lang', 'ip_change', 'hash_env');
  67  
  68      $texte = "<" . "?php\n";
  69      reset ($vars);
  70  
  71      while (list(, $var) = each($vars)) {
  72          $texte .= "\$GLOBALS['auteur_session']['$var'] = '" . addslashes($auteur[$var]). "';\n";
  73      }
  74  
  75      $texte .= "?" . ">\n";
  76  
  77      if ($f = fopen($fichier_session, "wb")) {
  78          fputs($f, $texte);
  79          fclose ($f);
  80      }
  81      else {
  82          $dir = $GLOBALS['flag_ecrire'] ? '../' : '';
  83          @Header ($dir . "spip_test_dirs.php");
  84      }
  85  }
  86  
  87  //
  88  // Verifier et inclure une session
  89  //
  90  function verifier_session ($id_session) {
  91      require_once (dirname(__FILE__). '/include/utils/meta.php');
  92      // Tester avec alea courant
  93      $ok = false;
  94  
  95      if ($id_session) {
  96          $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere'));
  97          if (file_exists($fichier_session)) {
  98              include ($fichier_session);
  99              $ok = true;
 100          }
 101          else {
 102              // Sinon, tester avec alea precedent
 103              $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere_ancien'));
 104              if (file_exists($fichier_session)) {
 105                  // Renouveler la session (avec l'alea courant)
 106                  include ($fichier_session);
 107                  supprimer_session ($id_session);
 108                  ajouter_session($GLOBALS['auteur_session'], $id_session);
 109                  $ok = true;
 110              }
 111          }
 112      }
 113  
 114      // marquer la session comme "ip-change" si le cas se presente
 115      if ($ok AND (hash_env() != $GLOBALS['auteur_session']['hash_env'])AND !$GLOBALS['auteur_session']['ip_change']) {
 116          $GLOBALS['auteur_session']['ip_change'] = true;
 117          ajouter_session($GLOBALS['auteur_session'], $id_session);
 118      }
 119  
 120      return $ok;
 121  }
 122  
 123  //
 124  // Supprimer une session
 125  //
 126  function supprimer_session ($id_session) {
 127      /********* Modification maciek@clever-age.com ***********************/
 128      if (isset($_SESSION['AgoraRubriquesCache'])) {
 129          session_destroy();
 130      }
 131      /********* Fin modification maciek@clever-age.com ***********************/
 132  
 133      $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere'));
 134  
 135      if (file_exists($fichier_session)) {
 136          @unlink ($fichier_session);
 137      }
 138  
 139      $fichier_session = fichier_session($id_session, lire_meta('alea_ephemere_ancien'));
 140  
 141      if (file_exists($fichier_session)) {
 142          @unlink ($fichier_session);
 143      }
 144  }
 145  
 146  //
 147  // Creer une session et retourne le cookie correspondant (a poser)
 148  //
 149  function creer_cookie_session ($auteur) {
 150      if ($id_auteur = $auteur['id_auteur']) {
 151          $id_session = $id_auteur . '_' . md5(creer_uniqid());
 152          $auteur['hash_env'] = hash_env();
 153          ajouter_session($auteur, $id_session);
 154          return $id_session;
 155      }
 156  }
 157  
 158  //
 159  // Creer un identifiant aleatoire
 160  //
 161  function creer_uniqid () {
 162      static $seeded;
 163  
 164      if (!$seeded) {
 165          $seed = (double)(microtime() + 1) * time();
 166          mt_srand ($seed);
 167          srand ($seed);
 168          $seeded = true;
 169      }
 170  
 171      $s = mt_rand();
 172  
 173      if (!$s)
 174          $s = rand();
 175  
 176      if ($GLOBALS['flag_uniqid2'])
 177          return uniqid($s, 1);
 178      else
 179          return uniqid($s);
 180  }
 181  
 182  //
 183  // Cette fonction efface toutes les sessions appartenant a l'auteur
 184  // On en profite pour effacer toutes les sessions creees il y a plus de 48 h
 185  //
 186  function zap_sessions ($id_auteur, $zap) {
 187      //$dirname = $GLOBALS['flag_ecrire'] ? "data/" : "ecrire/data/";
 188      $dirname = dirname(__FILE__). '/data/';
 189  
 190      // ne pas se zapper soi-meme
 191      /********** Modification SPIP_COOKIE johnny.muller@ypok.com **********/
 192      if ($s = $GLOBALS[$GLOBALS['cookie_prefix']. '_session'])
 193          //if ($s = $GLOBALS['spip_session'])
 194          /********** Fin modification SPIP_COOKIE johnny.muller@ypok.com **********/
 195          $fichier_session = fichier_session($s, lire_meta('alea_ephemere'));
 196  
 197      $dir = opendir($dirname);
 198      $t = time();
 199  
 200      while (($item = readdir($dir)) != '') {
 201          $chemin = "$dirname$item";
 202          if (ereg("^session_([0-9]+_)?([a-z0-9]+)\.php$", $item, $regs)) {
 203  
 204              // Si c'est une vieille session, on jette
 205              if (($t - filemtime($chemin)) > 48 * 3600)
 206                  @unlink ($chemin);
 207  
 208              // sinon voir si c'est une session du meme auteur
 209              else if ($regs[1] == $id_auteur . '_') {
 210                  $zap_num++;
 211                  if ($zap)
 212                      @unlink ($chemin);
 213              }
 214          }
 215      }
 216  
 217      return $zap_num;
 218  }
 219  
 220  //
 221  // reconnaitre un utilisateur authentifie en php_auth
 222  //
 223  function verifier_php_auth () {
 224      global $PHP_AUTH_USER, $PHP_AUTH_PW, $ignore_auth_http;
 225  
 226      if ($PHP_AUTH_USER && $PHP_AUTH_PW && !$ignore_auth_http) {
 227          $login = addslashes($PHP_AUTH_USER);
 228  
 229          //----------Modification Clever Age elebescond----------
 230          //Ajout Olivier Mansour
 231          require_once (dirname(__FILE__). "/include/bd/inc_auteur_factory.php");
 232          // fin ajout 
 233          $auteurMetier = &recuperer_instance_auteur();
 234          $allAuteurs = $auteurMetier->getAllForLogin($login);
 235          if (!PEAR::isError($allAuteurs)) {
 236              if (list(, $monAuteur) = each($allAuteurs)) {
 237                  $auth_mdpass = md5($monAuteur->getAleaActuel(). $PHP_AUTH_PW);
 238                  if ($auth_mdpass != $monAuteur->getPass()) {
 239                      $PHP_AUTH_USER = '';
 240                      return false;
 241                  }
 242                  else {
 243                      $GLOBALS['auteur_session']['id_auteur'] = $monAuteur->getAuteurId();
 244                      $GLOBALS['auteur_session']['nom'] = $monAuteur->getNom();
 245                      $GLOBALS['auteur_session']['login'] = $monAuteur->getLogin();
 246                      $GLOBALS['auteur_session']['email'] = $monAuteur->getEmail();
 247                      $GLOBALS['auteur_session']['statut'] = $monAuteur->getStatut();
 248                      $GLOBALS['auteur_session']['hash_env'] = hash_env();
 249                      return true;
 250                  }
 251              }
 252          }
 253      }
 254  }
 255  
 256  //
 257  // entete php_auth
 258  //
 259  function ask_php_auth ($text_failure) {
 260      @Header ("WWW-Authenticate: Basic realm=\"espace prive\"");
 261      @Header ("HTTP/1.0 401 Unauthorized");
 262      echo $text_failure;
 263      exit;
 264  }
 265  
 266  //
 267  // verifie si on a un cookie de session ou un auth_php correct
 268  // et charge ses valeurs dans $GLOBALS['auteur_session']
 269  //
 270  function verifier_visiteur () {
 271      /********** Modification SPIP_COOKIE johnny.muller@ypok.com **********/
 272      if (verifier_session($GLOBALS['HTTP_COOKIE_VARS'][$GLOBALS['cookie_prefix']. '_session']))
 273          //if (verifier_session($GLOBALS['HTTP_COOKIE_VARS']['spip_session']))
 274          /********** Fin modification SPIP_COOKIE johnny.muller@ypok.com **********/
 275          return true;
 276  
 277      if (verifier_php_auth())
 278          return true;
 279  
 280      return false;
 281  }
 282  ?>


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