IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Utiliser une base de données pour sécuriser vos sessions

Utiliser une base de données pour sécuriser vos sessions


précédentsommairesuivant

4. Les Fonctions

4.1. Fonction openSession()

Cette fonction va supprimer l'ancien enregistrement de la session qui correspond au même userid. Ensuite, elle va re-générer l'identifiant de session (pour des mesures de sécurité). Et va insérer le nouvel identifiant dans la base de données.
Vous pouvez trouver dans ce code une utilisation des fonctions getIP() et getBrowser(). Ces deux fonctions ne sont pas décrites ici mais vous pourrez en trouver un équivalant sur developpez.com (dans les Sources de PHP et dans la FAQ PHP).

fonction openSession()
Sélectionnez
function openSession($userid) {
	global $db;
	
	// On supprime la session en cours
	$deleteSQL = $db->prepare('DELETE FROM '.PREFIX_DB_SITE.'session 
					WHERE userid = :userid');
	$deleteSQL->execute(array(':userid' => $userid));
	
	// Re-génération du sid
	session_regenerate_id();
	
	// On insère le nouvel id de session dans la db
	$insertSQL = $db->prepare('INSERT INTO '.PREFIX_DB_SITE.'session (sid, userid, ip, browser)
				     VALUES (:sid, :userid, :ip, :browser)');
	$insertSQL->execute(array(':sid' => session_id(),
				  ':userid' => $userid,
				  ':ip' => getIP(),
				  ':browser' => getBrowser(),
	));
	
	return TRUE;
}

4.2. Fonction getLoginCheck()

Cette fonction va vérifier si le couple username/password est correct.
Elle n'a pas d'intérêt direct avec ce tutorial.

fonction getLoginCheck()
Sélectionnez
function getLoginCheck($username, $password) { 
	global $db;
	
	$username = addslashes(trim($username));
	$password = md5(addslashes(trim($password)));
	
	// Petite vérification pour éviter une requête sql
	if (empty($username) && empty($password)) {
		return FALSE;
	} else {
		$sql = $db->prepare('SELECT id FROM '.PREFIX_DB_SITE.'user
				      WHERE username = :username
				      AND password = :password ');
		
		$sql->execute(array(':username' => $username,
				    ':password' => $password,
		));
		
		$userdata = $sql->fetch(PDO::FETCH_ASSOC);
		
		if (!empty($userdata)) {
			$userdata = $userdata['id'];
		} else {
			$userdata = FALSE;
		}
		
		return $userdata;
	}
}

4.3. Fonction getUserInfo()

Récupère les informations contenues dans la table 'site_users' en fonction de l'id de session.

fonction getUserInfo()
Sélectionnez
function getUserInfo() { 
	global $db;

	$sql = $db->prepare('SELECT u.id, u.active, u.date, u.last_modified, u.username, u.country, 
					 u.gender, u.birthday, u.avatar
				FROM site_session s
				INNER JOIN site_user u
					ON s.sid = :sid
					AND s.userid = u.id ');
							
	$sql->execute( array(':sid' => session_id()) );
	
	$userdata = $sql->fetch(PDO::FETCH_ASSOC);
	
	if (empty($userdata)) {
		$userdata = FALSE;
	}
	
	return $userdata;
}

4.4. Fonction getFormView()

Cette fonction affiche le formulaire d'identification.
Comme la fonction getLoginCheck(), il n'y a pas de rapport direct avec ce tutorial.

fonction getFormView()
Sélectionnez
function getFormView() {
	$view = '<form enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'" method="post" id="form">'."\n";
	$view .= '<label for="username">Username&nbsp;&nbsp;</label>'.textfield('username')."\n";
	$view .= '<label for="password">Password&nbsp;&nbsp;</label>'.textfield('password')."\n";
	$view .= button('subit', 'Envoyer')."\n";
	$view .= '</form>';
		 
	echo $view;
}

4.5. Fonction getMsg()

Cette fonction affiche tout simplement une message de bienvenue en cas de succès d'identification.
Comme les fonctions getLoginCheck() et getFormView, il n'y a pas de rapport direct avec ce tutorial.

fonction getMsg()
Sélectionnez
function getMsg($username) {
	$view = $username.' ';
	if (empty($_POST['closeSession'])) {
		$view .= '<form enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'" method="post" id="form">'."\n";
		$view .= button('closeSession', 'Fermer la session')."\n";
		$view .= '</form>';
	} else {
		closeSession();
	}
	
	return $view;
}

4.6. Fonction dbClean()

Cette fonction permet de supprimer à chaque succès d'identification les entrées vieilles d'au moins 2 jours.

fonction dbClean()
Sélectionnez
function dbClean() {
	global $db;

	$limit = date('Y-m-d H-i-s', mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')));

	$cleanSQL = $db->prepare('DELETE FROM '.PREFIX_DB_SITE.'session 
					WHERE last_modified < :limit');
	$cleanSQL->execute( array(':limit' => $limit) );
}

4.7. Fonction closeSession()

Cette fonction permet de fermer une session en cours en supprimant son entrées dans la base de données et actualise la page.

fonction closeSession()
Sélectionnez
function closeSession() {
	global $db;
	
	$deleteSQL = $db->prepare('DELETE FROM '.PREFIX_DB_SITE.'session 
					WHERE sid = :sid');
	$deleteSQL->execute( array(':sid' => session_id()) );
	
	echo '<meta http-equiv="Refresh" content="0;'.$_SERVER['PHP_SELF'].'">';
}

précédentsommairesuivant

Copyright © 2006 Adrien Pellegrini. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.