Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2184 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Gestion des sessions en php[Need help!!]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion des sessions en php[Need help!!]

n°1019049
Stuntman
Posté le 20-03-2005 à 16:33:54  profilanswer
 

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):
 

Citation :


//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>
 


 
 

Citation :


//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
?>
 
 


 

Citation :


//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 !

mood
Publicité
Posté le 20-03-2005 à 16:33:54  profilanswer
 

n°1019154
brains
In riding I trust !
Posté le 20-03-2005 à 18:34:56  profilanswer
 

Pour ton listing 1 pas de <font> bourdel  :o  
 
Ensuite dans ton second niveau de pagge d'admin tu rajoute une condition de session :
 


 
if (isset($_SESSION['session1']) && isset($_SESSION['session2']))
{
//ton code ici
}
else
{
redirection vers ta page d'index
}


 


---------------
Débuter la moo chez les moants@HFR | Nikon D800 | On ne fait pas un calin chaste à une pute !, Lapattefolle
n°1019167
cerel
Posté le 20-03-2005 à 18:47:34  profilanswer
 

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 :
  1. define(ACCESSLVL1, 4);
  2. define(ACCESSLVL2, 8);
  3. define(ACCESSLVL3, 16);
  4. define(ACCESSLVL4, 32);
  5. define(ACCESSLVL5, 64);


 
Ensuite dans le code je fais comme ca :

Code :
  1. global $session;
  2. if ($session->data['logued'] && hasAccess(ACCESSLVL3)) {
  3.   // La personne est loguee et a acces au level 3
  4.   // Pour info, hasAccess est une fonction qui verifie que la session actuelle
  5.   // possede les droits necessaires pour acceder au level passe en parametre.
  6. }


 
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 :
2^0 : 0000 ( 0 )
2^1 : 0001 ( 1 )
2^2 : 0010 ( 2 )  
2^3 : 0100 ( 4 )
2^4 : 1000 ( 8 )


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.


Message édité par cerel le 20-03-2005 à 18:49:59
n°1019168
brains
In riding I trust !
Posté le 20-03-2005 à 18:49:08  profilanswer
 

cerel a écrit :

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 :
  1. define(ACCESSLVL1, 4);
  2. define(ACCESSLVL2, 8);
  3. define(ACCESSLVL3, 16);
  4. define(ACCESSLVL4, 32);
  5. define(ACCESSLVL5, 64);


 
Ensuite dans le code je fais comme ca :

Code :
  1. global $session;
  2. if ($session->data['logued'] && hasAccess(ACCESSLVL3)) {
  3.   // La personne est loguee et a acces au level 3
  4. }


 
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 :
2^0 : 0000 ( 0 )
2^1 : 0001 ( 1 )
2^2 : 0010 ( 2 )  
2^3 : 0100 ( 4 )
2^4 : 1000 ( 8 )
 
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.


 
pas bête  [:noxauror]  [:caimonchoa]


---------------
Débuter la moo chez les moants@HFR | Nikon D800 | On ne fait pas un calin chaste à une pute !, Lapattefolle
n°1019174
gamer-fou
AHHHHHH§§§!!!
Posté le 20-03-2005 à 18:52:29  profilanswer
 

ah waiii c'est bien malin comme methode ca [:noxauror]
merci bien pour l'astuce :p


---------------
Music is the most high!
n°1019263
Stuntman
Posté le 20-03-2005 à 20:02:08  profilanswer
 

très bien, merci je vais tenter cette astuce :)

n°1019293
cerel
Posté le 20-03-2005 à 20:26:39  profilanswer
 

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. :D


Message édité par cerel le 20-03-2005 à 20:26:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Gestion des sessions en php[Need help!!]

 

Sujets relatifs
PHP ne peut charger l'extension mysql ! Why and Help pliz![ Pocket PC ] gestion des code barre et PHP ?
help, macro BBA pour les liens hypertexte??Pb avec gestion des variables
[Help] intreface en PHP sur mon FTPUne variable est mal definie .. help .. (grosse fatigue)
gestion de parc informatiqueHELP Microchip PIC18
[Java] classe de gestion de fichier .ini à disposition par icigestion dynamique de donnée sous flash
Plus de sujets relatifs à : Gestion des sessions en php[Need help!!]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR