LastOn+$opac_duration_session_auth) < time()) { $checkempr_type_erreur = CHECK_EMPR_SESSION_DEPASSEE ; return FALSE; } // durée depuis le début de la session, max 12h if(($session->SESSstart+43200) < time()) { $checkempr_type_erreur = CHECK_EMPR_SESSION_DEPASSEE ; return FALSE; } // il faut stocker le sessid parce FL réutilise le tableau session pour aller lire les infos de users !!! if($session->SESSID=="") { $checkempr_type_erreur = CHECK_EMPR_SESSION_INVALIDE ; return FALSE; } else { $id_session = $session->SESSID ; $SESSstart_session = $session->SESSstart ; } // authentification OK, on remet LAstOn à jour $t = time(); // on avait bien stocké le sessid, on va pouvoir remettre à jour le laston, avec sessid dans la clause where au lieu de id en outre. $query = "UPDATE sessions SET LastOn='$t' WHERE sessid='$id_session' "; $result = pmb_mysql_query($query, $dbh) or die (pmb_mysql_error()); if(!$result) { $checkempr_type_erreur = CHECK_EMPR_PB_ENREG_SESSION ; return FALSE; } // récupération de la langue de l'utilisateur // mise à disposition des variables de la session define('SESSlogin' , $PHPSESSLOGIN); define('SESSname' , $SESSNAME); define('SESSid' , $PHPSESSID); define('SESSstart' , $SESSstart_session); return TRUE; } // startSession : fonction de démarrage d'une session function startSession($SESSNAME, $login) { global $dbh; // le lien MySQL global $stylesheet; /* pour qu'à l'ouverture de la session le user récupère de suite son style */ global $checkempr_type_erreur ; global $PMBdatabase ; // nettoyage des sessions 'oubliées' cleanTable($SESSNAME); // génération d'un identificateur unique // initialisation du générateur de nombres aléatoires mt_srand((float) microtime()*1000000); // nombre aléatoire entre 1111111111 et 9999999999 $SESSID = mt_rand(1111111111, (int)9999999999); // début session (date UNIX) $SESSstart = time(); // adresse IP du client $IP = $_SERVER['REMOTE_ADDR']; // inscription de la session dans la table $query = "INSERT INTO sessions (SESSID, login, IP, SESSstart, LastOn, SESSNAME) VALUES("; $query .= "'$SESSID'"; $query .= ", '$login'"; $query .= ", '$IP'"; $query .= ", '$SESSstart'"; $query .= ", '$SESSstart'"; $query .= ", '$SESSNAME' )"; $result = pmb_mysql_query($query, $dbh); if(!$result) { $checkempr_type_erreur = CHECK_EMPR_PB_OUVERTURE_SESSION ; return CHECK_EMPR_PB_OUVERTURE_SESSION ; } // cookie pour le login de l'utilisateur pmb_setcookie($SESSNAME."-LOGIN", $login, 0); // cookie pour le nom de la session pmb_setcookie($SESSNAME."-SESSNAME", $SESSNAME, 0); // cookie pour l'ID de session pmb_setcookie($SESSNAME."-SESSID", $SESSID, 0); // cookie pour la base de donnée pmb_setcookie($SESSNAME."-DATABASE", $PMBdatabase, 0); // mise à disposition des variables de la session if(!defined('SESSlogin')) define('SESSlogin' , $login); if(!defined('SESSname')) define('SESSname' , $SESSNAME); if(!defined('SESSid')) define('SESSid' , $SESSID); if(!defined('SESSstart')) define('SESSstart' , $SESSstart); //Ouverture de la session php header("Expires: Sat, 01 Jan 2000 00:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: post-check=0, pre-check=0",false); if (session_status() !== PHP_SESSION_ACTIVE) { session_cache_limiter('must-revalidate'); session_name("pmb".SESSid); session_start(); } return CHECK_EMPR_SESSION_OK ; } // cleanTable : nettoyage des sessions terminées (user non-deconnecté) function cleanTable($SESSNAME) { global $dbh; global $opac_duration_session_auth; // heure courante moins une heure $time_out = time() - $opac_duration_session_auth; // suppression des sessions inactives $query = "DELETE FROM sessions WHERE LastOn < ".$time_out." and SESSNAME = '".$SESSNAME."'"; $result = pmb_mysql_query($query, $dbh); } // sessionDelete : fin d'une session function sessionDelete($SESSNAME) { global $dbh; $login = $_COOKIE[$SESSNAME.'-LOGIN']; $PHPSESSID = $_COOKIE["$SESSNAME-SESSID"]; $PHPSESSLOGIN = $_COOKIE["$SESSNAME-LOGIN"]; $PHPSESSNAME = $_COOKIE["$SESSNAME-SESSNAME"]; // altération du cookie-client (au cas où la suppression ne fonctionnerait pas) pmb_setcookie($SESSNAME."-LOGIN", "no_login", 0); pmb_setcookie($SESSNAME."-SESSNAME", "no_session", 0); pmb_setcookie($SESSNAME."-SESSID", "no_id_session", 0); // tentative de suppression ddes cookies pmb_setcookie($SESSNAME."-SESSNAME"); pmb_setcookie($SESSNAME."-SESSID"); pmb_setcookie($SESSNAME."-LOGIN"); //Destruction de la session php session_destroy(); // effacement de la session de la table des sessions $query = "DELETE FROM sessions WHERE login='".addslashes($login)."'"; $query .= " AND SESSNAME='".addslashes($SESSNAME)."' and SESSID='".addslashes($PHPSESSID)."'"; $result = @pmb_mysql_query($query, $dbh); if($result) return TRUE; return FALSE; } function check_anonymous_session($SESSNAME){ global $dbh; global $check_messages; // par défaut : pas de session ouverte $checkempr_type_erreur = CHECK_EMPR_NO_SESSION ; // récupère les infos de session dans les cookies $PHPSESSID = (isset($_COOKIE["$SESSNAME-SESSID"]) ? $_COOKIE["$SESSNAME-SESSID"] : ''); if(isset($_COOKIE["$SESSNAME-LOGIN"])) { $PHPSESSLOGIN = $_COOKIE["$SESSNAME-LOGIN"]; } else { $PHPSESSLOGIN = ''; } $PHPSESSNAME = (isset($_COOKIE["$SESSNAME-SESSNAME"]) ? $_COOKIE["$SESSNAME-SESSNAME"] : ''); // on récupère l'IP du client $ip = $_SERVER['REMOTE_ADDR']; // recherche de la session ouverte dans la table $query = "SELECT SESSID, login, IP, SESSstart, LastOn, SESSNAME FROM sessions WHERE "; $query .= "SESSID='".addslashes($PHPSESSID)."'"; $result = pmb_mysql_query($query, $dbh); $numlignes = pmb_mysql_num_rows($result); if(!$numlignes){ startSession($SESSNAME, ""); }else{ // On remet LAstOn à jour $t = time(); // on avait bien stocké le sessid, on va pouvoir remettre à jour le laston, avec sessid dans la clause where au lieu de id en outre. $query = "UPDATE sessions SET LastOn='$t' WHERE sessid='$PHPSESSID' "; $result = pmb_mysql_query($query, $dbh); } } /** * Destruction de la session */ function logout() { global $cms_build_activate; if ($_SESSION["cms_build_activate"]) { $cms_build_activate = 1; } if (isset($_SESSION["build_id_version"]) && $_SESSION["build_id_version"]) { $build_id_version = $_SESSION["build_id_version"]; } $_SESSION = array(); if (!$cms_build_activate) { if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); pmb_setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } sessionDelete("PmbOpac"); } $_SESSION["cms_build_activate"] = $cms_build_activate; if (isset($_SESSION["build_id_version"]) && $_SESSION["build_id_version"]) { $_SESSION["build_id_version"] = $build_id_version; } }