Listing 21.5 : Sessions PHP avec enregistrement dans une base de données MySQL <?php class mySession { private $dbLink; public function open() { if(!($this->dbLink = mysql_connect("localhost", "httpd", ""))) { return(FALSE); } //Sélection de la base de données puis test de l'opération if(!($dbResult = mysql_query("USE test", $this->dbLink))) { return(FALSE); } return(TRUE); } public function close() { mysql_close($this->dbLink); return(TRUE); } public function read($id) { $Query = "SELECT SessionData " . "FROM session " . "WHERE ID = '" . addslashes($id) . "'"; if(!($dbResult = mysql_query($Query, $this->dbLink))) { return(FALSE); } $dbRow = mysql_fetch_assoc($dbResult); //Signale que l'enregistrement de la session a été accédé $Query = "UPDATE session " . "SET " . "LastAction=NOW() " . "WHERE ID='".addslashes($id)."' "; if(!($dbResult = mysql_query($Query, $this->dbLink))) { return(FALSE); } return($dbRow['SessionData']); } public function write($id, $data) { //Crée la session si elle n'existe pas $Query = "INSERT IGNORE " . "INTO session (ID) " . "VALUES ('".addslashes($id)."')"; if(!($dbResult = mysql_query($Query, $this->dbLink))) { return(FALSE); } //Actualise la session $Query = "UPDATE session " . "SET " . "SessionData='".addslashes($data)."', " . "LastAction=NOW() " . "WHERE ID='".addslashes($id)."' "; if(!($dbResult = mysql_query($Query, $this->dbLink))) { return(FALSE); } return(TRUE); } public function destroy($id) { $Query = "DELETE session " . "WHERE ID='".addslashes($id)."' "; if(!($dbResult = mysql_query($Query, $this->dbLink))) { return(FALSE); } return(TRUE); } public function garbage($lifetime) { $Query = "DELETE session " . "WHERE (LastAction + $lifetime) < NOW() "; if(!($dbResult = mysql_query($Query, $this->dbLink))) { return(FALSE); } return(TRUE); } } $s = new mySession(); session_set_save_handler( array($s, 'open'), array($s, 'close'), array($s, 'read'), array($s, 'write'), array($s, 'destroy'), array($s, 'garbage') ); //Démarrage de la session session_start(); //Incrémente le compteur à chaque chargement d'une page if(isset($_SESSION['Count'])) { $_SESSION['Count']++; } else { //start with count of 1 $_SESSION['Count'] = 1; } //Connexion à la base de données if(!($dbLink = mysql_connect("localhost", "httpd", ""))) { print("Couldn't connect to database! \n"); } //Sélection de la base de données puis test de l'opération if(!($dbResult = mysql_query("USE test", $dbLink))) { print("Couldn't use test database! \n"); } //Si l'utilisateur modifie l'ID invoice, mettre à jour //la colonne et celle de la session if(isset($_REQUEST['invoice'])) { //Assure que les données invoice sont des entiers $_REQUEST['invoice'] = (integer)$_REQUEST['invoice']; if(!($dbLink = mysql_connect("localhost", "httpd", ""))) { print("Couldn't connect to database! \n"); } //sélection de la base de données puis test de l'opération if(!($dbResult = mysql_query("USE test", $dbLink))) { print("Couldn't use test database! \n"); } $Query = "UPDATE session " . "SET Invoice={$_REQUEST['invoice']} " . "WHERE ID = '" . session_id() . "' "; if(!($dbResult = mysql_query($Query, $dbLink))) { print("Couldn't update invoice! \n"); } $Invoice = $_REQUEST['invoice']; } else { //récupération de la valeur invoice $Query = "SELECT Invoice FROM session " . "WHERE ID = '" . session_id() . "' "; if(!($dbResult = mysql_query($Query, $dbLink))) { print("Couldn't get invoice! \n"); } $dbRow = mysql_fetch_assoc($dbResult); $Invoice = $dbRow['Invoice']; } ?> <html> <head> <title>Listing 21-5</title> </head> <?php print("You have viewed this page {$_SESSION['Count']} times! \n"); print("Current Invoice: $Invoice \n"); //Affiche le formulaire de récupération du nom print("<form " . "action="{$_SERVER['PHP_SELF']}" " . "method="post">" . "\n" . " \n" . "</form>"); //Affichage d'un lien permettant de recharger cette page print("reload \n"); ?> </html>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question