Gestion des sessions en php[Need help!!] - PHP - Programmation
Marsh Posté le 20-03-2005 à 18:34:56
Pour ton listing 1 pas de <font> bourdel
Ensuite dans ton second niveau de pagge d'admin tu rajoute une condition de session :
|
Marsh Posté le 20-03-2005 à 18:47:34
J'ai pas lu ton code, mais j'ai l'impression que tu te compliques la vie.
Le but n'est pas de faire deux systemes de login (tu doubles les problemes, et les failles).
Ce qu'il faut faire dans ce genre de cas, tu gardes un seul systeme de login, mais en revanche, dans ta base, en plus d'avoir le login, le pass pour chaque utilisateur, tu auras un "level d'acces".
Ensuite, dans ton code, quand la personne se log, tu recupere dans la base son level d'acces que tu stockes dans la session.
Lorsque tu veux restreindre certaines sections, tu verifies d'abord que la session existe, que le user est logue (c'est pas parceque la session existe, que ca veut dire que le user est logue) et ensuite tu verifies son level d'access.
Pour le level d'acces j'ai tendance a le stocker sous forme d'un int. Chaque level que je defini corresponds a une puissance de deux.
Par exemple le level1, se serait 2^2 (je garde 2^0 et 2^1 pour des cas particuliers).
Pour eviter d'avoir des valeur en dur je definis les levels dans un fichier a part :
Code :
|
Ensuite dans le code je fais comme ca :
Code :
|
L'avantage en utilisant des puissance de deux, c'est que comme chaqu'une represente 1 seul bit a un emplacement particulier, il est alors possible de les aditioner et de controler si tel personne a acces a tel level.
Petit rappel : |
Ensuite je peux donner le level d'acces 12 a quelqu'un, en binaire cela donne : 1100
Si l'on regarde la table plus haut en remarque qu'un level d'acces de 12, correspond a quelqu'un qui aurait acces au ACCESSLVL1 et ACCESSLVL2.
Voila, j'espere avoir ete assez clair dans cette petite introduction.
Marsh Posté le 20-03-2005 à 18:49:08
cerel a écrit : J'ai pas lu ton code, mais j'ai l'impression que tu te compliques la vie.
|
pas bête
Marsh Posté le 20-03-2005 à 18:52:29
ah waiii c'est bien malin comme methode ca
merci bien pour l'astuce
Marsh Posté le 20-03-2005 à 20:26:39
Pour ceux qui vont utiliser cette technique, le "plus gros boulot" c'est dans la fonction hasAccess. C'est pas que la fonction soit longue, c'est surtout qu'il ne faut pas faire d'erreurs.
Dans ma fonction j'y ai inclus un peu de code relatif aux sessions, mais le plus gros travail de la fonction est fait en une ligne.
Deux petits conseils :
1) Vous assurer du type de variables que vous comparez. "32" n'est pas egal a 32. Normalement php fait la conversion vers le type voulu, mais moi j'ai eu quelques surprises, alors vaux mieux s'assurer du type.
2) Regardez du cote des operateurs logiques sur les bits.
Je ne vous donne pas le code car le but est que vous compreniez un peu ce que vous faites, au lieu de betement copier coller.
Marsh Posté le 20-03-2005 à 16:33:54
Bonjour à tous je réalise actuellement un site pour une équipe de jeu en ligne.J'ai déjà créer plusieurs modules permettant l'ajout,suppression et maj de news,matchs etc tout ca en lien avec 1 bd.
Cependant je voudrais restreindre l'accès à ces modules!Je veux donc 2 niveaux d'admins!
1- Avez vous des bon tutoriaux à me proposer pour m'aider à créer mes sessions ???
2- Voici les pages que j'ai déjà réalisées (tjs avec l'aide de différents tutos):
//login.php
<form name="login" method="post" action="admin/logon.php">
<table border="0" width="50" background="#CBD1DA">
<tr>
<td colspan="2">
<center><b><font size="2"><p></p><br>- DTT private section -</font></b></center>
<br>
</td>
<tr>
<td width="43"><font size="2">Login:</font></td>
<td width="147">
<input type="text" name="login" maxlength="20"/>
</td>
</tr>
<tr>
<td width="43"><font size="2">Pass:</font></td>
<td width="147">
<input type="password" name="mot_de_passe" maxlength="32"/>
</td>
</tr>
<tr>
<td colspan="2">
<center><input type="submit" name="submit" value="Login"><br><br></center>
</td>
</tr>
</table> </form>
<p></p>
<?
$date = date("d-m-Y" );
$heure = date("H:i" );
Print("Nous sommes le: $date " );
print("<br>" );
Print("Il est $heure " );
?>
<p></p><br>
//logon.php
<?php
//login.php: permet de vérifier si l'utilisateur peut se connecter:
require_once("../sql/config.php" ) ;
/*
si les champs de login et de mot de passe ne sont pas vides
on insère l'utilisateur.
*/
if($_POST["login"] != "" && $_POST["mot_de_passe"] != "" )
{
$login = $_POST["login"] ;
$pass = md5($_POST["mot_de_passe"]) ;
//connexion au serveur:
$cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;
//sélection de la base de données:
$db = mysql_select_db(DB) ;
//création de la requête SQL:
$sql = "SELECT * FROM joueurs WHERE pseudo = '".$login."' AND password = '".$pass."'" ;
//exécution de la requête SQL:
$requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
//on récupère le résultat:
$result = mysql_fetch_object($requete) ;
//si la requête s'est bien passée:
if(is_object($result))
{
//début de la sessions
session_start() ;
//enregistrement d'une variable de session, ici le login de l'utilisateur:
$_SESSION["login"] = $login ;
header("Location: .../home.php" ) ;
}//fin if
//sinon on retourne à la page d'inscription:
else
{
header("Location: ../home.php" ) ;
}//fin else
}//fin if
/*
sinon on retourne à la page d'inscription
*/
else
{
header("Location: ../home.php" ) ;
}//fin else
?>
//page login dans 1 seconde version mais qui plante car je rajoute ca:
j'ai 1 erreur avec les cookies !
...
<?php
//page1.php: première page d'entrée en session:
session_start() ;
if(!isset($_SESSION["login"]) || $_SESSION["login"] == "" )
{
header("Location: index.php" ) ;
}//fin if
else
{
echo("<pre>" ) ;
print_r($_SESSION) ;
echo("</pre>" ) ;
echo("Votre identifiant de session est: ".session_id()."<br/>" ) ;
echo("Bonjour ".$_SESSION["login"]." vous êtes maintenant sur la page 1<br/>" ) ;
echo("Pour allez à la page 2, cliquez <a href=\"page2.php\">ici</a><br/>" ) ;
echo("Pour vous déconnecter, cliquez <a href=\"logout.php\">ici</a><br/>" ) ;
}//fin else
?>
...
En espérent que vs pourrez m'aider !