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 :

[Cookies] Destruction de session


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Par défaut [Cookies] Destruction de session
    Salut tout le monde,

    Je vous décrie le problème. Lorsque je clique sur un lien "se déconnecter" la fonction "logout" (voir code ci-dessous) s'éxecute. et la session est détruite. Sauf que lorsque je clique sur le bouton "précédent" du navigateur et je clique sur oui pour loader les données qui proviennent du formulaire ou l'utilisateur entre son login et mot de passe je me trouve avec la session encore active. Dite moi s'il vous plait comment je pourrait remédier à ça et toute suggestion concerant le code est la bienvenue. Le code suivant est au début de ma page:
    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
    function logout()
    {
    	unset($_SESSION["sessioname"]);
    	session_destroy();
    }
    session_start();
    if (isset($_REQUEST['submit'])){
               $passwd = sha1(addslashes($_POST['password']));
    	$username = addslashes($_POST['login']);
    	require_once "../includes/connexion.php";
    	$query = "SELECT * FROM table WHERE email ='".$username."' and password = '".$passwd."'";
    	$sql = mysql_query($query) or die("authetification a échoué.");
    	$result = mysql_fetch_array($sql);
    	if($result[0] != null) {
    		$_SESSION['sessioname'] = $username;
    	}
    	else Header ("Location: ./pageconnexion.php");
    	mysql_close();
    }
    else if(!isset($_SESSION['sessioname'])) {
    			Header ("Location: ./pageconnexion.php");
    }
     
    ?>

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonjour,
    la documentation PHP fait référence à trois étapes dans la destruction "propre" d'une session, alors essayons de les utiliser toutes :

    1) Détruire le contenu de la session
    2) Détruire le cookie de session
    3) Détruire la session

    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
    <?php
     
      session_start();
     
      // étape 1
      $_SESSION = array();
     
      // étape 2
      if (isset($_COOKIE[session_name()]))
       setcookie(session_name(), '', time()-42000, '/');
     
      // étape 3
      session_destroy();
     
      header('Location: index.php');
     
    ?>
    Le mieux serait d'appeler ce script dans une page logout.php, puis de rediriger sur la page voulue. Comme cela, aucun retour en arrière n'est possible et donc la session est vide et le reste.

    Cordialement,
    DaRiaN.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Par défaut
    Salut,

    Merci pour votre réponse. J'ai bien utilisé un seul fichier logout.php, mais j'avoue que je n'utilise pas les cookies pour le moment. Mais cela n'a pas résolu le problème. Voici le contenu de mon fichier logout.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    session_start();
    unset($_SESSION["sessioname"]);
    session_destroy();
    header("location: index.php");
    ?>

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Je n'ai rien à ajouter, si vous voulez détruire la session, utilisez mon code comme exemple (un cookie de session existe, il faut le détruire), sinon, expliquez-moi votre problème.

  5. #5
    Membre confirmé Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Par défaut
    Utilise ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?
    include "connexion.php"; //le fichier de connexion
    session_start();
    unset($_SESSION['sessioname']);
    session_unset();
    session_destroy();
    header("location:index.php");
    ?>

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    bonjour,
    j'ai exactement le même problème et aucun des codes ne fonctionne. J'ai même essayé de vider les POST mais rien n'y fait: lorsque je fais "Précédent", la page s'affiche alors que la session vient d'être détruite. Comment faire?

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    voici mon script de déconnexion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php session_start();
    unset($_SESSION['log']);
    unset($_SESSION['pass']);
    unset($_POST);
    session_unset();
    session_destroy();
    header("Location:../../index.php");
    ?>
    et mon script de log (j'ai remplacé les include importants par les scripts des pages pour éviter de poster plein de morceaux de code différents):
    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
    <?php session_start();
    	if (isset($_POST) && (!empty($_POST['log'])) && (!empty($_POST['pass'])) )
    	{	
    		$_SESSION['log'] = $_POST['log'];
    		$_SESSION['pass'] = $_POST['pass'];
    		include ("domaine.class.php");
    		$login = $_POST['log'];
    		$mdp = $_POST['pass'];
    		include ("configCart.php");
    		$resBind=$domaine->validUser($login, $mdp);
    		if ($resBind==1)
    		{
    			include("banniere.php");
     
    			$_SESSION['log'] = $_POST['log'];
    			$_SESSION['mdp'] = $_POST['pass'];
     
    			// menu
    			echo "<div id='gMenu'><div id='menu'>";
    			//Affichage dynamique des Chapitres et Menus entrés par l'administrateur
    			include("../../config.php");
     
    			$chaps = "SELECT * FROM chapitres";
    			$affChap = pg_query($chaps) or die ('Échec requête : ' . pg_last_error());
     
    			while ($chapitre = pg_fetch_array($affChap))
    			{		
    				echo "<div class='titre'>".$chapitre['nomchap']."</div>";
     
    				if($chapitre['id_chap'] == '')
    				{
    						echo "Chapitre vide";
    				}
    				else
    				{
    					//affichage des menus selon le chapitre auquel ils appartiennent
    					$menusAssoc = "SELECT * FROM menus WHERE menus.id_chap='".$chapitre['id_chap']."'";
    					$affMenus = pg_query($menusAssoc) or die ('Échec requête : ' . pg_last_error());
    					while ($menu = pg_fetch_array($affMenus))
    					{		
    						echo "<div class='lienM'><a class='lienM' href=".$menu['url']." target=".$menu['ouvrir_dans'].">";
    						echo $menu['nom_menu'];
    						echo "</a></div>";
    					}
    				}
    			}
    			include ("configCart.php");
    			$infos=$domaine->recupApplis($login, $mdp, $dn);
    			$nb=$infos['count'];
     
    			for ($i=0; $i<$nb+1; $i++)
    			{	
    				for ($j=0; $j<$nb+1; $j++)
    				{
    					if ($infos[$i]['name'][$j]=='')
    					{	
    					echo '<div class="titre"></div>';
    						echo '<div class="lienM"><a class="lienM" href="'.$.'" target="pal"></a></div>';
    					}
    					else if ($infos[$i]['name'][$j]=='')
    					{
    						echo '<div class="lienM"><a class="lienM" href="'.$.'" target="pal"></a></div>';
    					}
    				}
    			}
    				pg_close($db_conn);
    			echo '<div id="menu_bas"><a href="deconnexion.php">Se déconnecter</a></div></div>';
    			?>	
    			<!-- contenu -->
    			<div id="gPrincipal">
    			<frameset border="no">
    				<div id="frame" >
    					<iframe name="pal" id="iframe" src="articles.php" frameborder="0" border="0">
    					</iframe>
    					<div id="mentions">
    						<?php include ("../../config.php");
    							$reqMentions = "SELECT * FROM articles WHERE num_article='5'";
    							$affMentions = pg_query($reqMentions) or die('Échec requête : ' . pg_last_error());
    							while ($result = pg_fetch_array($affMentions))
    							{		
    								echo $result["corps_article"];
    							}
    							pg_close($db_conn);
    						echo '</div></div></div></body></html>';
    		}
    		else
    		{
    			header("Location:index.php");
    		}
    	}
    	else
    	{
    		header("Location:index.php");
    	}
     ?>

    Il s'agit d'une identification LDAP qui permet d'afficher des menus en fonction des droits des utilisateurs selon leur groupe d'appartenance.

    Merci infiniment d'avance!

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Plus je lis ce post, plus je me dis que le problème est logique. Vous essayez tous les deux de vous déconnecter, puis de revenir en arrière sur la page login en validant les informations du cache. Si elles sont bonnes, ce qui est logique puisque vous étiez identifié, on vous identifie de nouveau.

    Si vous nous parliez de la page retour de la déconnexion, comme index.php, là je dirais, c'est pas normal, mais là, c'est normal, désolé.

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Oui en fait c'est bon , désolée
    merci!

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Par défaut
    Salut ataxie,

    J'ai trouvé une solution moi même. En fait DariaN a très bien compris le problème et il a tout a fait raison. Une façon de contourner ça et d'appeler ta page avec "header..." juste après l'authentification. Ca règle le problème définitivement.

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

Discussions similaires

  1. [Cookies] Destruction de session et requete sql
    Par webcap dans le forum Langage
    Réponses: 2
    Dernier message: 26/01/2009, 11h14
  2. Réponses: 8
    Dernier message: 01/08/2007, 17h00
  3. [Cookies] Destruction puis reconstruction de session
    Par pseudo5 dans le forum Langage
    Réponses: 6
    Dernier message: 17/02/2007, 03h03
  4. [Cookies] Pb destruction de session fermeture page
    Par Manuxy dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2006, 07h17
  5. besoin info sur le cookie et la session ?
    Par vbcasimir dans le forum Web
    Réponses: 8
    Dernier message: 16/11/2005, 11h45

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