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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

authentification avec une variable de session


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut authentification avec une variable de session
    Bonjour,

    sur ma page d'accueil, j'ai un formulaire pour l'authentification dont l'action positionne une variable de session ($_SESSION['auth']) à true si les identifiants sont corrects, et si cette variable est à true, au lieu d'afficher le formulaire, j'affiche le site sur la page d'accueil (index.php) :

    index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
            echo "debug auth (index):".$_SESSION["auth"]."<br/>";
    	if ( ! $_SESSION["auth"])
    	{
    		?>
    		<form action="page/authenticate.php" method="get">
                    <table style="height:68px;"><tr>
                    <div>
    		...
                    <td><input style="background:transparent;border:none;" type="text" size="30" value="<?php echo (isset($_COOKIE['user']))?$_COOKIE['user']:'';?>"
                    name="login2" /></td></tr>
     
                   <td><input style="background:transparent;border:none;" type="password" size="30" value="<?php echo (isset($_COOKIE['pwd']))?$_COOKIE  
                   ['pwd']:'';?>" name="pwd2" /></td></tr></table>
                   <table>
                   <tr style="height:40px;">
                   <td>
                   <input style="background:transparent;border:none;width:80px" type="submit"   name="login" value=""/></td></tr></table>
     
    	       </div>
    	       </form>
    	<?php
     
    	}
     
    else {
    // affichage du site
    }

    authenticate.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function authentification()
    {
    		global $bdd;
     
    		$auth=false;
     
    		$sql = 'select * from `users`';
     
    		$qid = $bdd->prepare($sql);
    		$qid->execute();
    		while ($row=$qid->fetch(PDO::FETCH_ASSOC) ) {
    				$usr = $row['user']; 
    				$password = $row['password'];  
    				if (($usr == $_POST['login2']) && ($password == $_POST['pwd2'])) {
    					$auth = true;
     
    					$_SESSION['user']=$usr;
    					$_SESSION['pass']=$password;
    					$temps = 365*24*3600;
    					if (isset($_POST['remember'])) {
    						setcookie ("user",$usr, time() + $temps);
    						setcookie ("pwd",$password, time() + $temps);
    					}
    					else {
    						setcookie ("user","", time() + $temps);
    						setcookie ("pwd","", time() + $temps);
    					}						
    				}
    		  }
    	$_SESSION['auth']=$auth;
     
     return $auth;
    }
     $auth=authentification();
     header ("Location: $_SERVER[HTTP_REFERER]" );
     exit(); ?>

    Mon souci, c'est que même si l'action met la variable de session à true, quand on revient dans index.php et qu'on la teste, elle est encore à false. Or même si c'est normal de la voir encore à false dans la page qui vient de la mettre à true, dans une autre page, elle devrait être vue à true, non ? Où est le bug ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    Avez-vous pensé à mettre "session_start();" au début de votre fichier ?

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Et oui ; début du fichier authenticate.php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    error_reporting(E_ALL ^ (E_NOTICE|E_WARNING|E_DEPRECATED));
    header('Content-type: text/html; charset=UTF-8');
    session_start(); 
    ...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu devrais utiliser var_dump() pour voir ce que contient ta variable.
    Un echo ne peut pas te dire si elle vaut FALSE.
    Si ta variable vaut FALSE c'est que quelque chose dans le code la met explicitement à FALSE, si elle n'est pas défini, c'est plutôt que tu perds ta session etc.

    Au passage, mettre le mot de passe en session et encore pire, dans un cookie, ça n'est pas une bonne idée.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    OK, mais j'ai fait un mécanisme "remember" (si l'utilisateur fait ce choix, quand il se reconnecte, ses identifiants sont rappelés). Cela existe sur de nombreux sites, mais si on ne passe pas par les cookies, comment faire ?

    Au passage, j'ai trouvé pourquoi, l'identification ne marchait pas.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'idée consiste à avoir une table séparée pour les authentifications permanentes.
    Cette table contient le login et une jeton qui est l'équivalent du mot de passe sauf qu'il s'agit d'une chaine aléatoire.

    - Quand l'utilisateur se connecte en cochant "se souvenir de moi" tu génères un jeton pour lui ; le couple login/jeton va en cookie ; la base de données contient le login et la version hashée du jeton.
    - Quand l'utilisateur vient sur le site avec un cookie de connexion, tu vérifies sa validité :
    - s'il est bon, tu lui génères un nouveau jeton ; cela limite l'utilisation d'un cookie volé.
    - s'il est faux, tu supprimes les jetons existant dans la base de données, l'utilisateur devra resaisir son mot de passe; il peut aussi être prévenu d'une tentative de connexion.

    Attention, l'utilisateur peut avoir plusieurs cookie s'il se connecte depuis plusieurs machines.

    Tu peux en lire plus sur le sujet en anglais :
    http://jaspan.com/improved_persisten..._best_practice
    https://paragonie.com/blog/2015/04/s...rm-persistence

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Merci pour cette info ; je m'y pencherai plus tard. Pour l'instant, j'ai juste supprimé le mécanisme "se souvenir de moi".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lier une feuille de style avec une variable de session JSP
    Par amani1 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/02/2014, 15h01
  2. [PERL] problème avec une variable de session PHP
    Par ingeston dans le forum Modules
    Réponses: 1
    Dernier message: 18/04/2012, 17h32
  3. [PHP 5.3] Probleme avec une variable de session
    Par diblasio dans le forum Langage
    Réponses: 2
    Dernier message: 13/09/2011, 21h49
  4. [MySQL] interdire les votes toutes les 5 minutes avec une variable de session
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/03/2008, 11h40
  5. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo