Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE DE SESSION ET D'AUTHENTIFICATION


Information sur la source

Catégorie :Sécurité & Cryptage Classé sous : session, authentification, cryptage Niveau : Initié Date de création : 11/10/2006 Date de mise à jour : 17/10/2006 13:29:20 Vu : 12 070

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (31)
Ajouter un commentaire et/ou une note


Description

Ceci est une classe simple qui se charge de gérer les sessions des visiteurs sur un site ainsi que leur authentification.
les visiteur (authentifiés ou non) sont considéré en ligne pendant 15 minutes.


Table MySQL :

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL auto_increment,
  `username` varchar(10) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `date_inscr` bigint(20) NOT NULL default '0',
  `activate_key` varchar(255) NOT NULL default '',
  `actif` enum('0','1','2','3') NOT NULL default '0',
  `last_connect` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `activate_key` (`activate_key`),
  KEY `username` (`username`)
)

INSERT INTO `users` VALUES (-1, 'invité', '','', 0, '0', '3', 0);

CREATE TABLE `sessions` (
  `sessionId` varchar(255) NOT NULL default '',
  `user_id` bigint(20) NOT NULL default '0',
  `last_maj` bigint(20) NOT NULL default '0',
  `ip` varchar(15) NOT NULL default '',
  PRIMARY KEY  (`sessionId`),
  KEY `last_maj` (`last_maj`)
)

==========================
Cette classe est prévu pour fonctionner avec un classe d'abstraction de base de données (en l'occurence celle de malalam disponible ici : http://www.phpcs.com/codes/CLASSE-BASE-DONNEES-EX-AVEC-MYSQL-MSSQL-PHP5_35671.aspx
 

Source

  • <?php
  • // Classe gérant les sessions et l'authentification sur le site //
  • ////////////////////////////////////////////////////////////////////////////////////
  • class Session
  • {
  • private $session_id
  • private $db;
  • private $msg_error;
  • private $Connected = false;
  • private $session;
  • private $user;
  • //--------------------------------------------------//
  • // Constructeur de la classe
  • //
  • function __construct($session_id, $db)
  • {
  • $this->session_id = $session_id;
  • $this->db = $db;
  • // On provoque le ménage des sessions épuisé
  • $this->CleanSessionsObsolete();
  • // On recherche les informations sur la session.
  • if($this->SessionExist())
  • {
  • // La session est déja existante. On mets à jour la date de dernier accés pour garder le visiteur.
  • $this->db->query("UPDATE sessions SET last_maj='".date('U')."' WHERE sessionId='".$this->session_id."';");
  • if($this->session['user_id'] != '-1')
  • {
  • $this->Connected = true;
  • $this->db->query("UPDATE users SET last_connect='".date('U')."' WHERE id='".$this->session['user_id']."';");
  • }
  • }
  • else
  • {
  • // Aucune session existante. On en crée une avec le compte invité.
  • $this->db->query("INSERT INTO sessions (sessionId, user_id, last_maj, ip) VALUES('".$this->session_id."', '-1', '".date('U')."', '".$_SERVER['REMOTE_ADDR']."')");
  • }
  • $this->RefreshData();
  • }
  • //--------------------------------------------------//
  • // Méthode magique __GET
  • // Retourne le contenu de la variable demandé
  • private function __GET($nm)
  • {
  • $this->RefreshData();
  • if(isset($this->$nm))
  • $r = $this->$nm;
  • else
  • throw new Exception('Session::__GET('.$nm.') => impossible de trouver l\'objet demandé.');
  • return $r;
  • }
  • //--------------------------------------------------//
  • // Vérifie si le numéro de session est déja enregistré dans la base
  • // Retourne true si la session est déja dans la base, sinon retourne false.
  • private function SessionExist()
  • {
  • $requete = $this->db->query("SELECT * FROM sessions WHERE sessionId='".$this->session_id."';");
  • $nb = $this->db->num_rows($requete);
  • if($nb == 0)
  • {
  • return false;
  • }
  • else
  • {
  • $this->session = $this->db->fetch_assoc($requete);
  • return true;
  • }
  • }
  • //--------------------------------------------------//
  • // Récupère les données depuis la base de données.
  • //
  • private function RefreshData()
  • {
  • $this->session = null;
  • $this->user = null;
  • // On récupère les informations sur la session
  • $requete1 = $this->db->query("SELECT * FROM sessions WHERE sessionId='".$this->session_id."';");
  • $this->session = $this->db->fetch_assoc($requete1);
  • // On récupère les informations sur l'utilisateur
  • $requete2 = $this->db->query("SELECT * FROM users WHERE id='".$this->session['user_id']."';");
  • $this->user = $this->db->fetch_assoc($requete2);
  • }
  • //--------------------------------------------------//
  • // Nettoie les sessions considérée comm fermée
  • //
  • private function CleanSessionsObsolete()
  • {
  • $interval = date('U') - 15*60;
  • $requete = $this->db->query("DELETE FROM sessions WHERE last_maj<='".$interval."';");
  • }
  • //--------------------------------------------------//
  • // Authentifie un utilisateur (var1 = nom d'utilisateur, var2 = mot de passe)
  • // Retourne un booléen pour la réussite de l'authentification.
  • // Si l'authentification réussi : affecte Connected à true. Si elle rate insert la raison dans msg_error.
  • public function AuthUser($username_input, $password_input)
  • {
  • $this->msg_error = '';
  • $username_input = mysql_real_escape_string(traiteVar($username_input, 0));
  • $password_input = mysql_real_escape_string(traiteVar($password_input, 0));
  • // On selectionne dans la base le champs correspondant au nom d'utilisateur.
  • $requete = $this->db->query("SELECT * FROM users WHERE username='".$username_input."';");
  • if($this->db->num_rows($requete) == 1)
  • {
  • $user = $this->db->fetch_assoc($requete);
  • // L'utilisateur existe, peut-il se connecter
  • if($user['actif'] != 1)
  • {
  • // L'utilisateur n'est pas actif, est suspendu ou
  • //la personne essai de se connecter avec le compte invité
  • switch($user['actif'])
  • {
  • case 0:
  • // L'utilisateur n'est pas activé
  • $this->msg_error = 'Ce compte n\'est pas actif. Consulter le mail qui vous à été envoyé pour plus de renseignement.';
  • break;
  • case 2:
  • // L'utilisateur n'est pas activé
  • $this->msg_error = 'Ce compte à été suspendu par un administrateur. Vous ne pouvez donc pas vous connecter.';
  • break;
  • case 3:
  • // L'utilisateur n'est pas activé
  • $this->msg_error = 'Ce compte ne permet pas de connexion authentifiée.';
  • break;
  • }
  • return false;
  • }
  • else
  • {
  • // L'utilisateur est bien actif.
  • // On vérifie maintenant si le mot de passe est bon
  • $pcrypt_input = crypt($password_input, $username_input);
  • if($pcrypt_input == $user['password'])
  • {
  • // Tout est ok on mets à jour la session pour prendre en compte les modifications
  • $this->db->query("UPDATE sessions SET user_id='".$user['id']."' WHERE sessionId='".$this->session_id."';");
  • $this->RefreshData();
  • $this->Connected = true;
  • $this->db->query("UPDATE users SET last_connect='".date('U')."' WHERE id='".$this->session['user_id']."';");
  • return true;
  • }
  • else
  • {
  • // Le mot de passe est incorrect
  • $this->msg_error = 'Utilisateur ou mot de passe incorrect.';
  • return false;
  • }
  • }
  • }
  • else
  • {
  • // L'utilisateur n\'existe pas
  • $this->msg_error = 'Utilisateur ou mot de passe incorrect.';
  • return false;
  • }
  • }
  • //--------------------------------------------------//
  • // Déconnecte un utilisateur
  • //
  • public function DisconnectUser()
  • {
  • $this->RefreshData();
  • if($this->session['user_id'] != -1)
  • {
  • $this->db->query("UPDATE sessions SET user_id='-1' WHERE sessionId='".$this->session_id."';");
  • $this->Connected = false;
  • $this->RefreshData();
  • }
  • }
  • //--------------------------------------------------//
  • // Récupère des satistiques sur les session courantes
  • //
  • public function GetStatsSession(&$data)
  • {
  • $requete = $this->db->query("SELECT * FROM sessions");
  • $res = $this->db->fetch_assoc($requete);
  • $data[] = $this->db->num_rows($requete);
  • }
  • }
  • ?>
  • <?php
  • // Utilisation
  • session_start();
  • $session = new Session(session_id(), $db);
  • // On authentifie
  • if($session->AuthUser($_POST['username'], $_POST['pass']))
  • {
  • echo 'Authentification réussi';
  • }
  • else
  • {
  • // L'authentification à échoué
  • echo $session->msg_error;
  • }
  • if($session->Connected)
  • {
  • echo 'Vous êtes connecté';
  • }
  • ?>
<?php
//          Classe gérant les sessions et l'authentification sur le site          //
////////////////////////////////////////////////////////////////////////////////////

class Session
{
  	private $session_id
        private $db;
  	private $msg_error;
  	private $Connected = false;
  	private $session;
        private $user;
  	
  	//--------------------------------------------------//
	// Constructeur de la classe
	// 
	function __construct($session_id, $db)
  	{
		$this->session_id = $session_id;
		$this->db = $db;
		
		// On provoque le ménage des sessions épuisé
		$this->CleanSessionsObsolete();	  
			  
		// On recherche les informations sur la session.
		if($this->SessionExist())
		{
		  	// La session est déja existante. On mets à jour la date de dernier accés pour garder le visiteur.
		  	$this->db->query("UPDATE sessions SET last_maj='".date('U')."' WHERE sessionId='".$this->session_id."';");
		  	if($this->session['user_id'] != '-1')
			{
				$this->Connected = true; 
				$this->db->query("UPDATE users SET last_connect='".date('U')."' WHERE id='".$this->session['user_id']."';");
			}
		}
		else
		{
		  	// Aucune session existante. On en crée une avec le compte invité.
		  	$this->db->query("INSERT INTO sessions (sessionId, user_id, last_maj, ip) VALUES('".$this->session_id."', '-1', '".date('U')."', '".$_SERVER['REMOTE_ADDR']."')");
		}
		$this->RefreshData();  
	}
	
	//--------------------------------------------------//
	// Méthode magique __GET
	// Retourne le contenu de la variable demandé
	private function __GET($nm)
	{
	  	$this->RefreshData();
		if(isset($this->$nm))
			$r = $this->$nm; 
		else
			throw new Exception('Session::__GET('.$nm.') => impossible de trouver l\'objet demandé.');
		
		return $r;
	}
	
	//--------------------------------------------------//
	// Vérifie si le numéro de session est déja enregistré dans la base
	// Retourne true si la session est déja dans la base, sinon retourne false.
	private function SessionExist()
	{
	  	$requete = $this->db->query("SELECT * FROM sessions WHERE sessionId='".$this->session_id."';");
	  	$nb = $this->db->num_rows($requete);
	  	if($nb == 0)
	  	{
	    	return false;
		}
		else
		{
			$this->session = $this->db->fetch_assoc($requete);
			return true;
		}
	}
	
	//--------------------------------------------------//
	// Récupère les données depuis la base de données.
	// 
	private function RefreshData()
	{
	  	$this->session = null;
	  	$this->user = null;
		  
		// On récupère les informations sur la session
		$requete1 = $this->db->query("SELECT * FROM sessions WHERE sessionId='".$this->session_id."';");
		$this->session = $this->db->fetch_assoc($requete1);
		 
		// On récupère les informations sur l'utilisateur  
		$requete2 = $this->db->query("SELECT * FROM users WHERE id='".$this->session['user_id']."';");
		$this->user = $this->db->fetch_assoc($requete2);
	}
	
	//--------------------------------------------------//
	// Nettoie les sessions considérée comm fermée
	// 
	private function CleanSessionsObsolete()
	{
		$interval = date('U') - 15*60;
		$requete = $this->db->query("DELETE FROM sessions WHERE last_maj<='".$interval."';");
	}
	
	//--------------------------------------------------//
	// Authentifie un utilisateur (var1 = nom d'utilisateur, var2 = mot de passe)
	// Retourne un booléen pour la réussite de l'authentification.
	// Si l'authentification réussi : affecte Connected à true. Si elle rate insert la raison dans msg_error.
	public function AuthUser($username_input, $password_input)
	{
	  	$this->msg_error = '';
	  	$username_input = mysql_real_escape_string(traiteVar($username_input, 0));
	  	$password_input = mysql_real_escape_string(traiteVar($password_input, 0));
	  	
		// On selectionne dans la base le champs correspondant au nom d'utilisateur.
	  	$requete = $this->db->query("SELECT * FROM users WHERE username='".$username_input."';");
	  	if($this->db->num_rows($requete) == 1)
	  	{
	    	$user = $this->db->fetch_assoc($requete);
			// L'utilisateur existe, peut-il se connecter
	    	if($user['actif'] != 1)
			{
			  	// L'utilisateur n'est pas actif, est suspendu ou 
			  	//la personne essai de se connecter avec le compte invité
			  	switch($user['actif'])
			  	{
			    	case 0:
			    		// L'utilisateur n'est pas activé
			    		$this->msg_error = 'Ce compte n\'est pas actif. Consulter le mail qui vous à été envoyé pour plus de renseignement.';
	    				break;
	    			case 2:
			    		// L'utilisateur n'est pas activé
			    		$this->msg_error = 'Ce compte à été suspendu par un administrateur. Vous ne pouvez donc pas vous connecter.';
	    				break;
	    			case 3:
			    		// L'utilisateur n'est pas activé
			    		$this->msg_error = 'Ce compte ne permet pas de connexion authentifiée.';
	    				break;
			  	}
				return false;
			}
			else
			{
			  	// L'utilisateur est bien actif.
			  	// On vérifie maintenant si le mot de passe est bon
			  	$pcrypt_input = crypt($password_input, $username_input);
			  	if($pcrypt_input == $user['password'])
			  	{
			    	// Tout est ok on mets à jour la session pour prendre en compte les modifications
			    	$this->db->query("UPDATE sessions SET user_id='".$user['id']."' WHERE sessionId='".$this->session_id."';");
			    	$this->RefreshData();
					$this->Connected = true;
					$this->db->query("UPDATE users SET last_connect='".date('U')."' WHERE id='".$this->session['user_id']."';");
			    	return true;
				}
				else
				{
				  	// Le mot de passe est incorrect
		  			$this->msg_error = 'Utilisateur ou mot de passe incorrect.';
	    			return false;
				}
			}	    	
		}
		else
		{
		  	// L'utilisateur n\'existe pas
		  	$this->msg_error = 'Utilisateur ou mot de passe incorrect.';
	    	return false;
		}
	}
	
	//--------------------------------------------------//
	// Déconnecte un utilisateur
	// 
	public function DisconnectUser()
	{
	  	$this->RefreshData();
	  	if($this->session['user_id'] != -1)
	  	{
	    	$this->db->query("UPDATE sessions SET user_id='-1' WHERE sessionId='".$this->session_id."';");
	    	$this->Connected = false;
	    	$this->RefreshData();
		}
	}
	
	//--------------------------------------------------//
	// Récupère des satistiques sur les session courantes
	//
	public function GetStatsSession(&$data)
	{
	  	$requete = $this->db->query("SELECT * FROM sessions");
	  	$res = $this->db->fetch_assoc($requete);
	  	
	  	$data[] = $this->db->num_rows($requete);
	}
}
?>


<?php
// Utilisation
session_start();
$session = new Session(session_id(), $db);

// On authentifie
if($session->AuthUser($_POST['username'], $_POST['pass']))
{
  echo 'Authentification réussi';
}
else
{
  // L'authentification à échoué
  echo $session->msg_error;
}

if($session->Connected)
{
    echo 'Vous êtes connecté';
}
?>

Conclusion

Les mots de passe doivent être cryptés dans la base de données suivant cette méthode :

$pass_crypt = crypt($password, $username);
 

Historique

12 octobre 2006 11:41:57 :
var => private
17 octobre 2006 13:29:20 :
correction point virgule

Commentaires et avis

signaler à un administrateur
Commentaire de GRenard le 12/10/2006 05:36:20

allez hop on mélange le php4 et php5 en même temps :)
var c'est php4, il faut mettre private, protected ou public avec php5 :)

signaler à un administrateur
Commentaire de wizad le 12/10/2006 08:39:19

comme quoi personne n'est parfait. Et c'est dans cet objectif que j'ai posté cette source : obtenir des conseils. ;)

Je corrige ça dans la journée.

signaler à un administrateur
Commentaire de kankrelune le 12/10/2006 14:13:09

Pour eviter le session hijacking il serait bien d'ajouter un identifiant unique basé sur l'ip, le navigateur, etc le tout hashé avec md5 pour avoir une clée utilisable et de comparer cette clé à chaque début de page... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de wizad le 12/10/2006 17:25:55

Pourrait tu développez ton idée. J'vais déja réfléchi à une telle méthode sans trouver de mise en place satisphaisante.

signaler à un administrateur
Commentaire de wizad le 12/10/2006 17:28:14

euh petite correction orthographique : J'vais = J'y ai

signaler à un administrateur
Commentaire de kankrelune le 12/10/2006 18:19:36

bah quelque chose du genre

function getUserCheckId()
{
    if(empty($this->userCheckId))
    {
        // getIp() = méthode qui récupère l'ip (pas juste le $_SERVER['REMOTE_ADDR'])
        $checkKey = $this->getIp();

        // getEnv = method qui recherche dans les variables $_SERVER, $_ENV
        // ou fait getenv() sinon renvoi ''
        $checkKey .= $this->getEnv('HTTP_ACCEPT_CHARSET');
        $checkKey .= $this->getEnv('HTTP_ACCEPT_ENCODING');
        $checkKey .= $this->getEnv('HTTP_ACCEPT_LANGUAGE');
        $checkKey .= $this->getEnv('HTTP_USER_AGENT');

        // hash() methode qui renvoie un hash sha1 si la fonction
        // existe sinon un hash md5
        $this->userCheckId = $this->hash($checkKey);
    }
    return $this->userCheckId;
}

après tu compare à chaque ouverture de session si l'identifiant est mauvais tu ferme la session... .. .

Désavantage certain fournisseur d'accès on des IP dynamiques qui changent tout le X temps... dans ce cas ça posera problème l'internaute sera déconnecté tous les X temps... .. .

Sinon il serait bien que tu te penche sur session_set_save_handler()

http://fr2.php.net/manual/fr/function.session-set-save-handler.php

@ tchaOo°

signaler à un administrateur
Commentaire de FhX le 15/10/2006 17:43:52

Jvais faire un peu chier mais (:p) :

"// getIp() = méthode qui récupère l'ip (pas juste le $_SERVER['REMOTE_ADDR'])"
$checkKey = $this->getIp();

==> méthode statique à préférer ici :
$checkKey = self::getIP();

Ce qui fait que getIP() peut être récupéré même en dehord de ta classe, pas besoin de faire 40 méthodes pour chaque classe :)

"// hash() methode qui renvoie un hash sha1 si la fonction
        // existe sinon un hash md5
        $this->userCheckId = $this->hash($checkKey);
"
Et puis la pareil :)

M'enfin c'est vraiment la ptite bête... juste que jvoulais marquer un truc à la con ;)

signaler à un administrateur
Commentaire de wizad le 15/10/2006 21:44:27

euh la désolé mais je te suis absolument pas : du mal avec les commentaires en ce moment.

signaler à un administrateur
Commentaire de FhX le 16/10/2006 12:32:23

jparlais pour kankrelune ^^

signaler à un administrateur
Commentaire de kankrelune le 16/10/2006 13:00:52

Muarf FhX... tu cherche la petite bète là... tu sais que j'ais pas encore perdu mes habitudes php4 alors t'en profite... lOoOl... t'as pas tort... .. . :oP

@ tchaOo°

signaler à un administrateur
Commentaire de webdeb le 17/10/2006 13:19:32

Il manque un point virgule à la fin de la première déclaration du premier attribut !

signaler à un administrateur
Commentaire de wizad le 17/10/2006 13:27:13

oups exact je corrige de suite et je retourne à travailler sur les amélioration suggéré par kankrelune.

signaler à un administrateur
Commentaire de dubaddxx le 03/11/2006 10:33:30

Merci pour cete classe qui va grandement m'aider dans le developpement de mon site. Mais j'ai cependant une question de newbie: dois je créer un nouvel objet 'Session' dans chaque page pour savoir si l'utilisateur est connecté par exemple ? Ou bien dois je mettre moi même mon objet Session dans la session crée ? => $_SESSION['session'] = new Session(session_id(), $db);
Je n'ai pas les idées très claires sur le sujet, merci de m'apporter un peu de lumière !
Merci

signaler à un administrateur
Commentaire de wizad le 03/11/2006 10:57:44

l'objet session doit être recrée dans chaque page : en effet lors de la création de l'objet la classe enregistre l'heure de dernier accés pour vérifier si la session est toujours active.

signaler à un administrateur
Commentaire de masternico le 26/11/2006 21:49:11

Salut, je trouve le code super bien fait.
Par contre, il y a un truc que je ne comprends pas.

Il est écrit $this->db->query(...), or je ne vois nul part la déclaration des fonctions propre à l'objet $db. Est-ce que c'est un objet prédéfini dans php ou est-ce une classe à part que tu as omis de mettre dans ton code. Si c'est le cas, il serait simpas de l'inclure dans le source.
Merci

signaler à un administrateur
Commentaire de wizad le 27/11/2006 00:26:22

Cette classe est prévu pour fonctionner avec un classe d'abstraction de base de données (en l'occurence celle de malalam disponible ici : http://www.phpcs.com/codes/CLASSE-BASE-DONNEES-EX-AVEC-MYSQL-MSSQL-PHP5_35671.aspx

Tout est indiqué...

signaler à un administrateur
Commentaire de masternico le 29/11/2006 23:09:45

wow, ça défrise une classe comme ça (je reviens de la classe de base de données).
Je m'incline devant une telle oeuvre.
Je manque encore de pratique pour bien en saisir toute la portée, mais c'est superbe. En conjontion avec le présent code, ça donne un truc bien sympa. Merci les gars et encore bravo
10/10 pour ma part

signaler à un administrateur
Commentaire de dubaddxx le 13/12/2006 18:06:37

>> l'objet session doit être recréé dans chaque page
Donc si je comprends bien, pas question ici de mettre en place un Singleton pour économiser des ressources ?


Toujours dans mon apprentissage de newbie, j'ai défini une classe UserManager avec son constructeur UserManager($db), qui me permet de récupérer la connexion à la base.

un exemple de mon code est

$user_manager = new UserManager($db); // le constructeur fait juste un "$this->db = $db";
$user_id = $session->GetUserId(); // que j'ai aussi rajouté dans la classe Session

puis enfin je peux manipuler l'objet user_manager:
$user_manager->addProperty($user_id, $property, $value); // INSERT des propriétés dans une table USERPROPERTY

Je ne suis pas forcément convaincu de cette manière de faire, je ne sais pas si je m'y prends bien. (d'autant plus que j'ai plusieurs classes dans le même genre, DVDManager, etc.)
En plus, comme je dois recréer l'objet $user_manager à chaque page ou je fais des opérations sur mes utilisateurs (CreateUser, RemoveUser ...), je pensais transformer ma classe UserManager en singleton, de manière à toujours récupérer la connexion valide.

Quelqu'un voit une autre manière plus élégante de faire, ou bien pourrait me donner son avis sur la chose ?

Merci
Ben

signaler à un administrateur
Commentaire de wizad le 13/12/2006 18:13:12

Vu que en PHP le script est terminé, fermé et les ressource libéré une fois la fin de l'interpretation il faut effectivement recrée les différents objets. Et je ne connais pas de moyen de les conservers d'une page à l'autre.

Pour le reste de ton post je lit ça tranquillement dés que possible avant de te conseiller.

signaler à un administrateur
Commentaire de kankrelune le 14/12/2006 11:25:30

Bah tu peux toujours stocker ton object user en session mais il faudra réouvrir la connection avec la bdd de toute façon... sinon rien ne t'empeche de faire un singleton, le singleton permet d'utiliser une instance unique d'une class pour tous les objet instancié de cette class rien à voir avec le stockage à la fin de l'éxécution du script... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de dubaddxx le 14/12/2006 14:00:42

Mouais, sachant que mon objet $user contient une référence à la connexion($db est une des propriétés), si j'en fais un singleton et que la connexion à la base pète, je ne sais pas comment l'appli comportera, puisque j'utiliserais des méthodes de UserManager qui feront référence à une connexion non valide.
Tant que je n'ai pas de problèmes de performances, je vais garder le système tel quel en fait.

Lorsque j'aurais plusieurs centaines de connexions simultanées (et là si j'y arrive un jour c'est jackpot!) ça sera une autre histoire ...
Merci pour vos conseils
Ben

signaler à un administrateur
Commentaire de kankrelune le 14/12/2006 14:07:58

"si j'en fais un singleton et que la connexion à la base pète"

J'ais du mal à voir ce que tu veux dire... pourquoi veux tu que la connection "pète"... tu lui donne à manger du choux ? lOoOl... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de wizad le 14/12/2006 14:58:41

En fait j'arruive pas non plus à suivre ton raisonnemet...

(mdr kankrelune)

signaler à un administrateur
Commentaire de dubaddxx le 14/12/2006 21:56:57

oué en fait je vais revoir ma copie je crois ...
je vais mettre de l'ordre dans ma tête et dans mon code car là je m'y perds aussi :op

signaler à un administrateur
Commentaire de lilole le 28/12/2006 14:34:29

Salut, que fait la fonction traiteVar car elle n'ai pas dans la classe session ?

cf ci-dessous :
public function AuthUser($username_input, $password_input)
    {
         $this->msg_error = '';
         $username_input = mysql_real_escape_string(traiteVar($username_input, 0));
         $password_input = mysql_real_escape_string(traiteVar($password_input, 0));

signaler à un administrateur
Commentaire de FhX le 28/12/2006 18:54:19

Cette fonction est normalement mise dans une classe pour SGBD.

Voila pourquoi elle est à l'extérieur, elle n'a rien à faire dans cette classe.

signaler à un administrateur
Commentaire de wizad le 01/01/2007 16:32:08

oui pas fait attention en faite il s'agit d'une fonction destinée à éviter les injections sql (et tout autre tentative)

signaler à un administrateur
Commentaire de Bkdenice le 04/02/2007 20:32:23

Bonjour,
Tous d'abord merci pour ce script
Mais j'ai une Question
Et-il possible de le faire pour Microsft SQL Serveur ?

Merci d'avance

signaler à un administrateur
Commentaire de wizad le 05/02/2007 00:32:41

Tout à fait, la classe n'utilise aucune référence à mysql. Il suffit de créer une classe gérant sql_server (ou de regarder du coté de la classe de malalam) répondant au objet $db de cette classe (query et fetch_assoc essentiellement).

signaler à un administrateur
Commentaire de slaxswf le 15/05/2007 12:09:00

InnoDB sessions at the 2007 MySQL User Conference

Il serait pratique de mettre à jour ta source et de proposer un fichier ZIP COMPLET avec la class abstraite mysql de malalam ;)

Pour ma part il manque des points-virgules à la fin de tes requêtes de création de table mysql ;)

++ Merci d'avance.

signaler à un administrateur
Commentaire de damnedc le 20/02/2008 14:05:09

je comprends pas pourquoi il y a erreur : Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /mnt/157/sda/0/0/damnedc/index.php on line 6

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Problème d'authentification [ par Also know as ] Bonjour,Voilà je suis en train de construire désespérément un espace mmebres, cxe n'est pas la première question qu eje pose à propos de cet espace qu pb session urgent! [ par chamallow ] Bon c'est la prmei&#232;re fois que je fais un code d'authentification, mais bon.En fait, il faut que je rende l'acc&#232;s au site s&#233;curis&#233; bug avec les cookies d'une session [ par ahcorad ] Bonsoir,J'ai un souci avec les cookie pour un espace membre.Si on se connecte et que l'on navigue sur le site tout marche OK !mais quand on revien la donné mysql irrecuperable apres authentification [ par yoyo77yo ] bonjour à tous j'espere que quelq'un pourra m'aider !!!voila j'ai un site de e commerce que je veux limiter à certains membres inscrits dans ma base d Paginations [ par slhuilli ] bonjourje ne sais pas apres de longues recherches comment je pourrais paginer 10 par 10 mes réponses issues d'une select * .Voici ce que j'ai : &lt;?  panier : je ne m'en sors pas.... [ par jereln ] Bonjour, je suis en trai de créer un panier avec utilisation des sessions.J'ai une première page (index.php) qui correspond à mon catalogue. Chaque ar écriture sur un fichier txt [ par jereln ] petite question : je suis en train de créer un site avec des sessions. Je souhaite enregistrer des données sur un fichier txt.Est-il possible de créer problème de panier et session [ par jereln ] je suis en train de créer un panier à l'aide de sessions. J'ai une première page catalogue (index.php) où sont listés mes articles. Chacun d'eux a un cryptage et libmcrypt [ par metos ] Bonjour, j'aimerais utiliser du cryptage AES en php avec la fonction :  mcrypt_module_open. Lors du chargement de la page l'erreur suivante se produit cryptage AES [ par metos ] Bonjour,     J'aurais besoin de crypter une donnée en AES avec une clé de 256bit. J'ai essayé avec la libraire mcrypte, le problème c'est qu'en utili


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode