une authentification un peu trop présente

Eléphanteau du PHP | 19 Messages

11 déc. 2007, 01:07

Bonjour,

J'ai réalisé une page d'administration à laquelle l'accès n'est autorisé qu'après authentification. J'ai inséré dans cette page un code qui permet de vérifier si l'utilisateur est bien connecté, et s'il ne l'est pas il est redirigé automatiquement vers le formulaire de connexion. Jusque là tout va très bien.

Le problème est qu'une fois connecté, lorsque l'utilisateur veut naviguer d'une page à l'autre, il est toujours renvoyé sur le formulaire de connexion.
Moi j'aimerais qu'on ne puisse pas acccéder à la page admin et les autres qu'en étant connecté, mais une fois que cela est fait que la navigation se passe naturellement.

Voilà le code qui vérifie si la personne est bien connectée:
Code :
<?
session_start();
include("connexion.php");
/* 
si la variable de session login n'existe pas cela siginifie que le visiteur 
n'a pas de session ouverte, il n'est donc pas logué ni autorisé à
acceder à l'espace membres
*/
if(!isset($_SESSION['login'])) {
  echo '<font color="#FF33FF">Vous n\'êtes pas autorisé à accéder à cette zone; veuillez d\'abord vous identifier.</font>';
  include('login.html');
  exit;
}
 
?>
Pour le reste de la page, elle affiche un tableau avec des données provenant de la base. Comme ces données sont nombreuses, je les ai réparties sur plusieurs pages, et je n'affiche que 30 résultats par page. Le problème se présente lorsqu'on veut naviguer d'une page à l'autre.

Si vous avez besoin de plus de renseignements, je vous les fournirai sans problème!

Merci d'avance pour votre aide...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 déc. 2007, 08:54

Est-ce que tu crées bien le cookie après la connexion ?
Montre nous le code de la page de connexion
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 19 Messages

11 déc. 2007, 14:29

Bonjour,

Voici le code de la page login:

<?
// connexion à la BDD
include("connexion.php");
 $select = mysql_select_db($base);
 //Vérification des variables
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from admin where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);
  if($data['password'] != md5($password)) {
    echo '<font color="#FF33FF">Mauvais login / password. Merci de recommencer</font>';
    include('login.html'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    session_start();

 $_SESSION['login'] = $login;
    
     include('admin.php');   
     exit;
    // ici vous pouvez afficher un lien pour renvoyer
    // vers la page d'accueil de votre espace membres  
  }    
}
else {
  echo '<font color="#FF33FF">Vous avez oublié de remplir un champ.</font>';
   include('login.html'); // On inclut le formulaire d'identification
   exit;
}


?>
Il doit bien y avoir un problème quelque part, mais j'ai beau relire mon code je ne le trouve pas... :cry:

ViPHP
ViPHP | 4039 Messages

11 déc. 2007, 14:46

ben je vois pas de cookie la dedans.. et le script demande de se réauthentifier à chaque fois qu'il doit se recharger.. c'est bien ce qu'il fait.. tu devrait vérifier l'existance d'une session dans les conditions, ou enregistrer un cookie.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 déc. 2007, 15:26

Je pense qu'il faisait allusion au cookie créé par la session :)

Il est effectivement étonnant qu'après le
session_start(); 
$_SESSION['login'] = $login; 
de la page de login, le test if(!isset($_SESSION['login'])) soit vrai

Ton navigateur accepte-t-il les cookies ? la session en dépose un sur ta machine pour savoir à quelles données de session elle doit t'associer. Si le cookie n'a pas pu être déposé, le lien n'est pas établi et il ne peut retrouver les données te concernant... (ou alors faut passer par le sessid :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 19 Messages

12 déc. 2007, 17:44

le script demande de se réauthentifier à chaque fois qu'il doit se recharger.
Où est-ce que tu vois ça dans le script? Est-ce bien utile de se réauthentifier à chaque chargement? C'est une mesure de sécurité?

Sinon, pour mon problème initial, lorsque je le testais en local ça ne fonctionnait pas, et là je l'ai mis sur le serveur, j'ai refait les mêmes manipulations, et ça fonctionne!
Il doit y avoir quelque chose de différent entre le local et le serveur que je n'ai pas compris... :roll:

Eléphant du PHP | 75 Messages

13 déc. 2007, 00:30

Bonjour,

Voici le code de la page login:

...
  else {
    session_start();

 $_SESSION['login'] = $login;
    
     include('admin.php');   
     exit;
    // ici vous pouvez afficher un lien pour renvoyer
    // vers la page d'accueil de votre espace membres  
  }    
}
else {
...
Le "session_start();" ne doit-il pas être toujours tout en haut de la page?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 déc. 2007, 11:37

Le "session_start();" ne doit-il pas être toujours tout en haut de la page?
Nope, le session_start() doit être avant l'utilisation de $_SESSION et avant tout envoi de données au navigateur, mais ça peut très bien être l'avant dernière ligne de ton code :)
C'est plus par commodité et pour être sur de ne pas l'oublier qu'on a tendance à le mettre au début, mais si on veut être rigoureux il faudrait effectivement faire comme lui et ne le mettre que lorsque l'on en a réellement besoin :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 75 Messages

13 déc. 2007, 18:55

D'accord merci. ^^
Perso je le met toujours en haut, c'est comme ça que j'ai appris. :/

Par contre j'arrive toujours pas à voir d'où vient son problème...