Gestion d'espace administration

Soyez le premier à donner votre avis sur cette source.

Vue 18 601 fois - Téléchargée 2 383 fois

Description

Voici une classe permettant de gerer totalement votre espace administration.

Source / Exemple :


<?

class auth
{
	var $user;
	var $passwd;
	var $page;
	var $name_session;
	var $redir_time;
	
	function auth() // Constructeur
	{
		$this->user = $_REQUEST["user"]; // Recupere le nom d'utilisateur courant
		$this->passwd = $_REQUEST["passwd"]; // Recupere le mot de passe courant
		$this->page = $_SERVER["PHP_SELF"]; // Recupere le nom de la page
		$this->name_session = "administration"; // Nom de la session
		$this->redir_time = 1500; // Temps de la redirection en ms
		
		session_start(); // Creer la session
		if (!$this->is_admin()) // Verifie si l'utilisateur est deja logger
		{
			if ($_REQUEST["auth"] <> 1) // Verifie si le formulaire doit etre validé
			{
				// Formulaire
				echo "<form action='$this->page?auth=1' method=post>
				<b>Nom d'utilisateur : <input type=text maxlength=30 name=user>
				<p>Mot de passe : <input type=password maxlength=12 name=passwd>
				<p><input type=submit value=Valider></form>";
				
				die(); // Arrete le chargement de la page
			}
			else // Validation du formulaire
			{
				$this->valid_auth();
			}
		}
	}
	
	function valid_auth()
	{	
		
		if($this->user != "" and $this->passwd != "") // Verifie que les champs ne sont pas vides
		{
			$this->passwd = md5($this->passwd); // Crypte le mot de passe
			$result = mysql_query("SELECT passwd FROM comptes WHERE user='$this->user'"); // Selectionne le mot de passe suivant le login
			$row = mysql_fetch_array($result);
			$vpasswd = $row["passwd"];
			if($vpasswd == $this->passwd) // Verifie si le mot de passe est correct
			{
				$admin = base64_encode("$this->user:$this->passwd"); // Encode les informations
				$_SESSION["$this->name_session"] = $admin; 
				header("location: $this->page"); // Recharge la page
			}
			else // Si le mot de passe est incorrect
			{
				echo "<script> setTimeout(\"window.location=\'$this->page\';\", $this->redir_time); </script>"; // Redirige apres 1.50 sec
				echo "Identifiants invalides...";
			}
		}
		else // Si un ou les champs sont vides
		{
			echo "<script> setTimeout(\"window.location=\'$this->page\';\", $this->redir_time); </script>";
			echo "Les champs sont vides...";
		}
		die(); // Arrete le chargement de la page
	}
	
	function is_admin() 
	{
		
		$admin = $_SESSION["$this->name_session"];
		$admin = base64_decode($admin); // Decode les informations
		$admin = explode(":", $admin); // Separe le mot de passe du login
		$user = $admin[0]; // Login 
		$passwd = $admin[1]; // Mot de passe
		
		if ($user != "" and $passwd != "") { // Verifie que les informations du cookie ne sont pas vides
			$query = mysql_query("SELECT passwd FROM comptes WHERE user='$user'"); // Selectionne le mot de passe suivant le login
			$row = mysql_fetch_array($query);
			$vpasswd = $row["passwd"]; 
			if($vpasswd == $passwd && $vpasswd != "") { // Verifie que le mot de passe est correct et qu'il n'est pas vide
				return 1; // Retourne 1, l'utilisateur est deja logger
			}
		}
		return 0; // Retourne 1, l'utilisateur n'est pas logger
	}
	
	function delog()
	{
		session_unset(); // Detruit la session
		header("location: $this->page"); // Recharge la page
	}
	
	function get_name()
	{
		$admin = $_SESSION["$this->name_session"];
		$admin = base64_decode($admin); // Decode le cookie
		$admin = explode(":", $admin); // Separe le mot de passe du login
		$user = $admin[0]; // Login 
		echo $user; // Affiche le login
	}
}

?>

Conclusion :


Merci de metttre vos commentaires, bon ou mauvais, et surtout si vous avez fait des modifications je veux bien les connaitres.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
10 avril 2009

bonjour je suis dans le meme cas que hotfirenet, il me semble que quand on interroger la base il fallait mettre host et les mot de passe pour y asseder
est ce qu'avac le php 5 ou le poo ce n'est plus utiles, car la je m'y perds
Messages postés
8
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
10 novembre 2006

Comment on l'utilise ta class car moi la poo je connais pas du tout
Messages postés
48
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
16 août 2010

merci beaucoup kankrelune, je vais faire ca, et pour un ID de session j'ai vu ca sur php.net je suis en train de modifier ma classe pour le faire, je la reposterai des que possible. ++
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Ah j'oubliais... il peut être bien de rajouder en session un id spécial pour éviter le vol de session... va voir sur...

http://www.phpcs.com/codes/CLASSE-SESSION-AUTHENTIFICATION_39893.aspx

j'en parle brievement... .. .

@ tchaOo°
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

C'est mieux... .. . ;o)

Sinon si je puis me permettre...

- 1 - je pense que ta classe ne devrait pas gérer l'affichage du formulaire et des messages d'erreur... sont boulot c'est de controler l'internaute pas de faire de l'affichage... qui plus est forcer l'affichage depuis ta classe peut poser des problèmes si on utilise un système de templates

- 2 - en reprenant le 1 ta methode valid_auth() devrait prendre en argument le nom d'utilisateur et le pass qui sont soummis... ce qui permet directement dans le code de faire...

if($monObj->valid_auth($_POST['uname'],$_POST['upass']))
// c'est bon
else
// c'est pas bon

Qui plus est cela permet d'utiliser, dans le formulaire, les noms de champs que l'on veut et non pas d'être cantoné à user et passwd... .. .

- 3 - tu ne fait aucun echappement de caractère avant de faire ta requete... c'est risqué... très risqué... toujours utiliser mysql_real_escape_string sur les variables provenant de l'utilisateur... .. .

- 4 - session_unset() est déprécié il me semble... utilise plutot session_destroy()

$_SESSION = array();

if (isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time()-42000, '/');

session_destroy();

- 5 - ne t'embete pas à passer les valeurs de session dans base64, etc... cela pouvait s'avérer necessaire pour le stockage en cookie mais pour les session c'est inutile... tu perd du temps pour rien... .. .

$_SESSION[$this->name_session] = array(
'name' => $this->user,
'pass' => $this->passwd
);

- 6 - avant de faire ton mysql_fetch_array() sur le résultat retourné par mysql vérifis que mysql à trouvée quelque chose... car si l'utilisateur c'est planté en entrant son pseudo ça risque de planter... qui plus est utilise empty plutot que != "" car si ta variable est null ça passe (et ça casse ?)... .. .

function valid_auth($name,$pass)
{
if(!empty($name) and !empty($pass)) // Verifie que les champs ne sont pas vides
{
// Selectionne le mot de passe suivant le login
$result = mysql_query('SELECT passwd FROM comptes WHERE user=\''.mysql_real_escape_string($name).'\'');

if(mysql_num_rows($result) !== 1) // on a trouvé l'utilisateur ou pas ?
return false;

$pass = md5($pass); // Hasch le mot de passe
$row = mysql_fetch_array($result);

if($row['passwd'] === $pass) // Verifie si le mot de passe est correct
{
$_SESSION[$this->name_session] = array(
'name' => $name,
'pass' => $pass
);

return true;
}
}

return false;
}

Voili voilou... .. .

@ tchaOo°
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (wolfcyber95)