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 :

Vider la variable "$_SESSION" [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut Vider la variable "$_SESSION"
    Bonjour,

    J'ai créé une application PHP qui content 5 fichiers :

    • index.php
    • login.php
    • dbconnect.php
    • accueil.php
    • fonction1.php


    L'accès à l'application se fait après identification par login/password sur la page index.php.


    • index.php :

    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
    26
     
    <title> Authentification</title>
    <center>
    <br>
    <strong>Authentification</strong>
    <br>
    <?php
    echo '<br><br>Veuillez saisir votre identifiant et mot de passe  :';
    ?>
    <br><br>
    <form action="login.php" method='post'>
    <table align="center" border="0">
      <tr>
        <td>Identifiant :</td>
        <td><input type="text" name="login" maxlength="10"></td>
      </tr>
      <tr>
        <td>Mot de passe :</td>
        <td><input type="password"name="pass" maxlength="10"></td>
      </tr>
        <tr>
    	<td></td>
        <td colspan="2" align="left"><input type="submit" value="Valider"></td>
      </tr>
    </table>
    </form>

    Après post du formulaire (méthode POST), l'utilisateur est renvoyé sur la page login.php.


    • login.php :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?php
    session_start();
    header("Content-Type: text/html; charset=iso-8859-15");
    include('dbconnect.php');
     
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
      extract($_POST);
      // on recupère le password de la table associé au login du visiteur
      $sql = "select password from utilisateurs where login='".$login."'";
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
      $data = mysql_fetch_assoc($req);
     
      if($data['password'] != $pass) {
        echo '<p><font color="red">L\'identifiant et/ou le mot de passe sont incorrects.<br>Merci de recommencer votre saisie.</font></p>';
        include('index.php'); // On inclut le formulaire d'identification
    	mysql_close($db);
        exit;
      }
      else {
        $_SESSION['login'] = $login;
     
        // lien pour renvoyer vers la page d'accueil
    	include('accueil.php');
    	exit;
      }   
    }
    else {
      echo '<p><font color="red">Un ou plusieurs champs n\'ont pas été remplis. <br>Merci de recommencer votre saisie.</font></p>';
       include('index.php'); // On inclut le formulaire d'identification
       mysql_close($db);
       exit;
    }
    ?>
    Voici la page de connexion à la Base de Données (dbconnect.php).


    • dbconnect.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    // ouverture de connexion vers mysql
     
    $db = mysql_connect('localhost', 'root', 'password');  
    mysql_select_db('app_usr',$db);                    
     
    ?>

    Voici la page d'accueil (accueil.php).


    • accueil.php :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?php
    session_start();
    header('charset=iso-8859-15; Content-Type: text/html'); 
     
    /*
    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 'Vous n\'êtes pas autorisé à accéder à cette zone';
      include('index.php');
      exit;
    }
    else {
        include('dbconnect.php');
    	$login = $_SESSION['login'];
        $sql = "select pseudo from utilisateurs where login='".$login."'";
        $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    	$data = mysql_fetch_assoc($req);
    	echo'<div style="text-align: right;">'.$data['pseudo'].'&nbsp</div>';
      }   
    ?> 
    <html>
    <head>
    <style type="text/css">
    ul
    {
    	list-style-type:none;
    }
     
     
    li
    {
    	display:inline;
    }
     
    a
    {
    	float:left;
    	width:30%;
    	text-align:center;
    	text-decoration:none;
    	color:white;
    	font-weight:bold;
    	background:#999900;
    	padding:5px;
    	margin: 0 auto;
    	border-right:1px solid #FFFFFF;
    }
     
    a:hover
    {
    	background:#CCCC00;
    }
    </style>
    <title>Accueil</title>
    <center>
     
    </head>
    <body>
     
    <strong>Accueil</strong>
    <br><br></center>
    <br>
    <ul>
    <li><a href="fonction1.php">Fonction 1</a></li>
    <li><a href="fonction2.php">Fonction 2</a></li>
    <li><a href="index.php">Se déconnecter</a></li>
    </ul>
     
    </body>
    </html>

    La Fonction 1 est la suivante : (fonction1.php).


    • fonction1.php :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    <?php
    session_start();
    header("Content-Type: text/html; charset=iso-8859-15");
     
    /*
    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 authentifié ni autorisé à
    accéder à l'espace membres
    */
    if(!isset($_SESSION['login'])) 
    {
    	echo 'Vous n\'êtes pas autorisé à accéder à cette zone';
    	include('login.php');
    	exit;
    }
    else 
    {
        include('dbconnect.php');
    	$login = $_SESSION['login'];
        $sql = "select pseudo from utilisateurs where login='".$login."'";
        $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
        $data = mysql_fetch_assoc($req);
    	echo'<div style="text-align: right;">'.$data['pseudo'].'&nbsp</div>';
      } 
    ?>
     
    <html>
    <head>
    <title> Fonction 1</title>
     
    <style type="text/css">
    ul
    {
    	list-style-type:none;
    }
     
     
    li
    {
    	display:inline;
    }
     
    .menuhaut
    {
    	position : relative;
    	top:-45px;
    	left:-48px; 
    	float:left;
    	width:20%;
    	text-align:center;
    	text-decoration:none;
    	color:white;
    	font-weight:bold;
    	background:#999900;
    	padding:5px;
    	margin: 0 auto;
    	border-right:1px solid #FFFFFF;
    }
     
     
    a
    {
    	float:left;
    	width:18%;
    	text-align:center;
    	text-decoration:none;
    	color:white;
    	font-weight:bold;
    	background:#999900;
    	padding:5px;
    	margin: 0 auto;
    	border-right:1px solid #FFFFFF;
    }
     
    a:hover
    {
    	background:#CCCC00;
    }
    </style>
     
     
    </head>
    <body>
    <ul>
    <li><a class="menuhaut" href="accueil.php">Accueil</a></li>
    <li><a class="menuhaut" href="fonction2.php">Fonction 2</a></li>
     
    <li><a class="menuhaut" href="index.php">Se déconnecter</a></li>
    </ul>
    <br><br>
    <center><strong>Fonction 1</strong></center>
    <br><br>
    </body>
    </html> 
     
    <?php
    phpinfo();
    ?></center>

    Lorsque je clique sur Se déconnecter depuis la page d'accueil (lorsqu'on se trouve sur cette page, c'est la page login.php qui apparaît dans la barre d'adresse du navigateur), ma session expire bien : je suis renvoyé vers la page index.php et si je clique sur le bouton back de mon navigateur, ce dernier me dit que la session est expirée.

    Problème : lorsque je me trouve dans la page fonction1.php et que je clique sur Se déconnecter, ma session n'expire pas : une fois renvoyé vers la page index.php, si je clique sur le bouton back du navigateur, j'arrive à revenir sur la page précédente.

    Sauriez-vous comment forcer l'expiration de la session en cours lorsque je clique depuis la page fonction1.php sur Se déconnecter ?

    NB: les navigateurs Internet Explorer 8.0.6 et Firefox 3.5.2 réagissent de la même façon.

  2. #2
    Membre éprouvé Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 878
    Par défaut
    Bonjour.


    Essaye avec la fonction session_write_close.

  3. #3
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Essaye avec la fonction session_write_close.
    je pense pas que ca va solutionner le problème, le cookie de session sera toujours présent, et les données aussi au prochain session_start()

    Je pense qu'il suffit du "flusher" ta variable $_SESSION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION = array();

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Bonjour,

    Merci de vos réponses.
    J'ai essayé d'ajouter la ligne $_SESSION = array(); dans index.php, mais la session n'expire toujours pas.

    A quel endroit dois-je insérer cette ligne? Est-ce dans le fichier fonction1.php?
    Dans ce cas, à quel endroit du fichier faut-il ajouter la ligne ?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    J'ai réussi en m'inspirant d'un post précédent et de la réponse de "bigltnt".

    En fait, dans la fonction fonction1.php, il faut changer le lien lors du clic sur "se déconnecter" : j'ai donc changé le lien "index.php" en "supprimer.php".

    Le code de supprimer.php est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    session_start();
    $_SESSION = array();
    session_start();
     
    header('Location: index.php');
    ?>
    Encore merci les gars!
    En espérant que cette solution servira à d'autres.

  6. #6
    Membre confirmé Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Par défaut
    Oké cool ! Par contre 2 "session_start()" ???

    je vois pas pourquoi tu as besoin du deuxieme ... ca ddevrait meme te faire une erreur ... m'enfin bon ...

    Juste pour info, dans le cas ou tu ferais un exit() après ton header(), c'est a ce moment qu'il faut faire le session_write_close() :

    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
     
    <?php
    // Demarre la session et remplit $_SESSION
    session_start();
    // Vide $_SESSION
    $_SESSION = array();
     
    // Comme on provoque un arret brutal ( exit() ), 
    // on enregistre manuellement la session
    session_write_close(); 
    // On redirige
    header('Location: index.php');
    // Rien ne doit suivre apres, donc exit(), mais je crois que ca peut 
    // empecher l'enregistrement de $_SESSION, d'où le session_write_close
    exit();
    ?>

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

Discussions similaires

  1. Update avec variable contenant une quote
    Par NejNej dans le forum Développement
    Réponses: 2
    Dernier message: 13/11/2009, 17h51
  2. rechercher variable contenant une quote
    Par fins51 dans le forum Access
    Réponses: 2
    Dernier message: 21/03/2007, 22h20
  3. Réponses: 3
    Dernier message: 20/01/2007, 20h36

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