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 :

Session utilisateur PHP


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut Session utilisateur PHP
    Bonjour à tous, voici mon problème :

    Je possède une page de connexion à mon site (index.php).
    Lorsque l'utilisateur se connecte, il arrive sur ma page d'accueil. Cependant, je n'arrive pas à gérer le fait qu'il soit connecté pour les autres pages de mon site. Voici comment je procède :

    J'ai un script qui me permet de vérifier que l'utilisateur est bien connecté :

    Code : 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
    <?php
    /*--------------------------
    Vérification de la connexion
    --------------------------*/
    if(!isset($_SESSION['sessionOuverte']) || !$_SESSION['sessionOuverte']){
    	if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){
    		$verif = $bdd->query('SELECT mail FROM user WHERE mail = \''. addslashes($_POST['login']) .'\' AND mdp = \''. addslashes(md5($_POST['password'])) .'\'');
    		$i= 0;
    		while ($donnees = $verif->fetch()){
    			$i++;
    		}
    		$verif->closeCursor();
     
    		if($i < 1){
    			header('location: index.php?erreur='. $i .'');
    		}
    		else{
    			$_SESSION['sessionOuverte']= true;
    		}
    	}
    	else{
    		header('location: index.php?erreur=1');
    	}
    }
    ?>
    Donc si son login et son mot de passe son bons à la tentative de connexion, une variable de session $_SESSION['sessionOuverte'] est créée avec pour valeur "true". Si ceux ci ne sont pas bons, la variable de session est détruite (redirection vers la page index.php qui passe la variable de session à null à tous les coups).
    Et j'appelle ce script au début de chacune de mes pages. Donc si l'utilisateur s'est correctement loggé, il devrait pouvoir accéder à chaque page sans être redirigé vers la page d'accueil avec un message d'erreur non?
    Et bien là ce n'est pas le cas, à chaque tentative d'accès à une nouvelle page, ça rentre dans la condition de mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!isset($_SESSION['sessionOuverte']) || !$_SESSION['sessionOuverte']){}
    Et ensuite vu que les login et mot de passe de la page index.php ne sont pas présents et bien il est redirigé..

    Je ne vois vraiment pas où je déconne.. Si quelqu'un peut me permettre d'ouvrir les yeux .. ^^'
    Merci beaucoup d'avance!

    EDIT: Je précise que session_start(); est présent au début de chacune de mes pages.

  2. #2
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut
    Bonjour,

    Pourquoi tes variables sont elles en $_POST ?
    Elles ne sont postées qu'une seule fois pour vérifier si ton couple login / password existe, après selon ton script c'est via une session ou un cookie mais plus en $_POST.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Et bien si cette condition est exécutée c'est que l'utilisateur vient du formulaire de connexion (car la condition précédente permet de savoir si la variable de session existe et donc que l'utilisateur s'est déjà connecté). Donc logiquement, le test de ces variables $_POST ne doit se faire que la première fois, lorsque l'utilisateur essaie de se connecter pour la première fois. Dans les autres pages, il ne devrait pas s'effectuer puisque la variable de session $_SESSION['sessionOuverte'] est censée exister. Le script sert donc de sécurité au cas où quelqu'un déciderait d'accéder à une page sans ne s'être jamais connecté.

    J'espère réussir à me faire comprendre ^^'

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le code que tu a donné ne vaut que pour la page index.php ! (-> traitement du formulaire d'identification)

    Pour les autres pages :

    _protec_page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php // protection page
    if(!isset($_SESSION['sessionOuverte']) || $_SESSION['sessionOuverte']!=true) {
    	// redirection vers identification (index.php ?)
    	header('location : index.php');
    	exit;
    }
    // sinon : c'est bon, il est connecté, on continue ...
    ?>
    et dans les pages à protéger (tout au début) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php session_start();
     // protection page
    require('_protec_page.php'); ?>

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Merci de vos réponses.


    jreaux62 ce que tu me proposes correspond exactement à ce que je fais. Malgré tout, j'ai essayé comme tu m'as dit, mais ça ne marche toujours pas.

    Ah, je viens de supprimer le $_SESSION['sessionOuverte']= null; au début de la page index.php et maintenant ça marche.. Comment cela se fait-il..?

    Et ne faut-il pas supprimer la variable de session si l'utilisateur revient sur la page de connexion? Car si on ne le fait pas et qu'il décide de se reconnecter, même s'il entre des identifiants incorrects, la variable de session étant existante, il arrivera à accéder au site.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Bon j'ai "résolu" le problème en passant un paramètre lorsque l'utilisateur clique sur le bouton de déconnnexion du site, ainsi, l'annulation de la variable de session ne s'effectue que si ce paramètre est présent :

    index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_GET['deconnexion']) && $_GET['deconnexion']==true){
    	$_SESSION['sessionOuverte']= null;
    }
    Mais je ne comprends toujours pas pourquoi le fait de mettre cette ligne sans condition (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['sessionOuverte']= null;
    ) dans la page index.php efface aussi la variable de session dans les autres pages. Si quelqu'un trouve la réponse... Car je considère ma méthode comme une "solution temporaire" (en effet, si l'utilisateur accède à la page de connexion autrement que par le bouton de déconnexion, il va rester connecté même en entrant de mauvais identifiants, ce n'est donc pas très bon..)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu es sûr de bien comprendre ce que tu dis ??

    C'est juste une question de LOGIQUE :

    1/ l'utilisateur arrive sur la page index (identification)
    -> SI PAS "identifié" -> on affiche le formulaire d'identification
    ...-> formulaire rempli : on vérifie les login et mpd
    ......-> SI login et mdp OK : on valide "identifié" (on affiche "bonjour!" ou on redirige vers une page "mon profil" par exemple)
    -> SI DEJA "identifié" -> pas besoin du formulaire ! (on affiche "bonjour!" ou on redirige vers une page "mon profil" par exemple)

    2/ sur une page protégée
    -> SI PAS "identifié" -> on redirige vers la page index (identification)
    -> SI DEJA "identifié" -> on affiche la page ...

    3/ "déconnexion"
    -> on supprime "identifié"

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Désolé, je me suis mal exprimé :

    La variable de session est passé à "null" au début de la page index.php. Une fois que l'utilisateur essaie de se connecter à partir de cette page, le traitement se fait sur la page accueil.php contenant mon script de vérification. La variable de session est donc créée après la page index.php. C'est pour cela que le fait de mettre $_SESSION['sessionOuverte']=null; dans index.php ne devrait LOGIQUEMENT pas affecter ma variable qui se créé APRES. Cette ligne sert juste à supprimer la variable si l'utilisateur décide de revenir sur l'écran de connexion un moment APRES s'être connecté.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par yeste64 Voir le message
    La variable de session est passé à "null" au début de la page index.php.
    Ca ne sert à rien !
    en plus : soit elle est "true", soit elle est "false", mais pas "null" !

    Et pourquoi veux-tu qu'un utilisateur DEJA connecté ait envie de se RE-connecter ???
    même s'il retourne sur la page index, c'est à toi (au programme) de le rediriger !

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    null supprime l'existence d'une variable.

    Bon, je sens que tu me prends de haut, mais je te remercie quand même de ton aide.
    Voici le résultat final :

    index.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($_SESSION['sessionOuverte']) && $_SESSION['sessionOuverte']==true){
    	if(isset($_GET['deconnexion']) && $_GET['deconnexion']==true){
    		$_SESSION['sessionOuverte']= null;
    	}
    	else{
    		header('location: accueil.php');
    	}
    }
    Toutes mes autres pages :

    Code : 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
    <?php
    /*--------------------------
    Vérification de la connexion
    --------------------------*/
    if(!isset($_SESSION['sessionOuverte']) || $_SESSION['sessionOuverte']!=true) {
    	if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){
    		$verif = $bdd->query('SELECT mail FROM user WHERE mail = \''. addslashes($_POST['login']) .'\' AND mdp = \''. addslashes(md5($_POST['password'])) .'\'');
    		$i= 0;
    		while ($donnees = $verif->fetch()){
    			$i++;
    		}
    		$verif->closeCursor();
     
    		if($i < 1){
    			header('location: index.php?erreur=1');
    		}
    		else{
    			$_SESSION['sessionOuverte']= true;
    		}
    	}
    	else{
    		header('location: index.php?erreur=1');
    	}
    }
    ?>
    L'utilisateur n'a donc plus la possibilité de revenir sur l'écran de connexion autrement qu'en cliquant sur le bouton de déconnexion sur le site ou bien en fermant son navigateur au préalable.

    Merci quand même, l'amabilité et l'humilité, ce sera pour une autre fois!

    A bientôt

  11. #11
    Invité
    Invité(e)
    Par défaut
    Celui qui dit "moi, je sais !" est plus ignorant que l'ignorant ; il faut toujours savoir apprendre des autres.
    Ostad Elahi, Musicien et philosophe iranien

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Bon, je sens que tu me prends de haut, mais je te remercie quand même de ton aide.
    Je te reprochais seulement la manière dont tu me répondais, et pas du tout le contenu de tes réponses. Tu m'as d'ailleurs permis de résoudre mon problème, c'est simplement la manière dont tu l'as fait qui m'a moyennement plu.

    Sur ce, à bientôt.

  13. #13
    Invité
    Invité(e)
    Par défaut
    C'est vrai, j'abuse parfois des "!!" ou des "???" ...

    Ca permet juste d'"animer" le discours !

    Un peu comme un méditerranéen qui parle "en faisant des grands gestes" ...

    Pas de quoi se fâcher, ok ?

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Je suis basque, alors disons que j'ai le sang chaud aussi ok? lol A bientôt l'ami !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par yeste64 Voir le message
    Je suis basque, ...
    Tout s'explique !
    J'avais un bon copain à ... Urrugne : "Jérome du Sud" ! (moi, c'était "Jérome du Nord" !!)
    On s'était connu (aussi !) sur ce forum (je l'avais aidé à programmer son site ...)
    On est ... "un peu fâché" depuis ...
    Aucun des deux n'a voulu perdre au "concours des grandes gueules" !

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Mdr t'en fais pas chuis pas une grande gueule, loin de là. J'ai juste le sang chaud

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/06/2011, 13h51
  2. [Tomcat]échange de session entre php et java
    Par benwa dans le forum Tomcat et TomEE
    Réponses: 18
    Dernier message: 05/06/2007, 17h01
  3. [Cookies] newbie: Les sessions en PHP
    Par yoda_style dans le forum Langage
    Réponses: 12
    Dernier message: 20/01/2006, 20h49
  4. php:comment utiliser les sessions en php
    Par feten dans le forum Langage
    Réponses: 3
    Dernier message: 19/11/2005, 16h17
  5. Réponses: 5
    Dernier message: 19/09/2005, 11h46

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