Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2008, 05h41   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 132
Points : 44
Points : 44
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 :
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");
}
 
?>
helpcomm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 11h09   #2
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
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 :
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.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 17h57   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 132
Points : 44
Points : 44
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 :
1
2
3
4
5
6
<?php
session_start();
unset($_SESSION["sessioname"]);
session_destroy();
header("location: index.php");
?>
helpcomm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 20h26   #4
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
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.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 18h37   #5
Membre habitué
 
Avatar de Akramweb
 
Inscription : avril 2005
Messages : 168
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 168
Points : 125
Points : 125
Envoyer un message via MSN à Akramweb
Utilise ce code:
Code :
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");
?>
__________________
Parle peu, et fais beaucoup
Akramweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 10h42   #6
Invité de passage
 
Inscription : novembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 4
Points : 3
Points : 3
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?
ataxie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 10h56   #7
Invité de passage
 
Inscription : novembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 4
Points : 3
Points : 3
voici mon script de déconnexion:

Code :
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 :
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!
ataxie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 11h28   #8
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
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é.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 12h25   #9
Invité de passage
 
Inscription : novembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 4
Points : 3
Points : 3
Oui en fait c'est bon , désolée
merci!
ataxie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2008, 03h59   #10
Membre du Club
 
Inscription : novembre 2007
Messages : 132
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 132
Points : 44
Points : 44
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.
helpcomm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h32.


 
 
 
 
Partenaires

Hébergement Web