[ Index ] |
|
Code source de SPIP Agora 1.4 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |