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 15/03/2007, 14h06   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Par défaut Effacer variable de session

Bonjour,
j'ai toujours un problème d'effacement de mes variables de session. Enfin, je pense que ça vient de là.
Voilà la manière que j'utilise pour effacer mes variables de session et la session :
Code :
1
2
3
4
5
 
$_POST = array ();
$_SESSION = array ();
session_unset ();
session_destroy ();
Et voici le script que j'utilise sur chaque page devant avoir un accès réduit :
Code :
1
2
3
4
5
6
7
8
9
10
 
<?php
session_start();
 
$filename = "sessions.php4";
if (file_exists ($filename)) require_once ($filename);
set_time_limit  (0);
 
controleAcces ();
?>
La fonction controlAcces vérifie à chaque fois le login et le mot de passe dans la base de données, si tout est bon on affiche la page sinon on affiche le formulaire d'identification.

Mon soucis est que lorsque l'on quitte en cliquant sur le lien de déconnexion et que l'on fait plusieurs fois précédent, on arrive au bout de plusieurs fois à voir une page dont on ne devrait pas avoir l'accès et on peut voir ce que l'on veut. En fait on est reconnecter car le navigateur dit qu'il ne peut afficher la page sans renvoyer des informations ($_POST j'imagine) et quand on lui dit de le faire et bien on a accès aux pages.
Si mes explications ne suffisent pas, je veux bien vous montrer les fonctinos que j'utilise.
Merci par avance de votre aide moi je cale sec.
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h21   #2
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Salut,
en fait, si je comprends bien, c'est pas vraiment un problème de session.
C'est que l'utilisateur en faisant "précédent" un certain nombre de fois re-soumet le formulaire qui ouvre l'accès à la partie protégée...
Hum c'est fourbe !!
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h27   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
C'est un problème.
J'efface pourtant bien la variable $_SESSION et même celle $_POST (je m'étais dis que cela pouvait être la cause) mais ça marche toujours pas.
J'ai essayé sous IE et FF mais c'est le même combat.

Une idée ??????
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h28   #4
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
Code :
1
2
3
4
 
<script language='javascript'>
window.close();
</script>
à la déconnexion ?
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h31   #5
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Le souci c'est que tu pourras les effacer autant de fois que tu veux,
quand l'utilisateur recharge la page, il recrée les variables sessions.
Je n'avais jamais vraiment fait attention à ce souci.
Il faut que le navigateur "oubli" la valeur des $_POST une fois traité.
Est ce qu'en mettant no-cache dans les pages formulaire et reception du formulaire?
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h53   #6
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Merci pour votre aide.

En ce qui concerne le "windows.close ()", je voudrais éviter.
En dernier recours pourquoi pas.

Et en ce qui concerne <META Http-Equiv="Pragma" Content="no-cache">, ça ne change rien.
J'ai fait un test sur ce forum. Si je me déconnecte et que je fais précédent j'ai accès à la dernière page vue mais je ne peux rien faire d'autre. Par exemple si je veux poster un message je suis redirigé sur la page d'identification.
J'ai essayé sur un autre site et c'est pareil, on n'est pas reconnecté.

Je me permets de vous mettre mon code dès fois qu'il y ait une grosse bourde que je ne vois pas.

Code sur les pages nécessitant une identification :
Code :
1
2
3
4
5
6
7
8
9
10
 
<?php
session_start();
 
$filename = "sessions.php4";
if (file_exists ($filename)) require_once ($filename);
set_time_limit  (0);
 
controleAcces ();
?>
Et code du fichier sessions.php4 (qui appèlent un autre fichier contenant les constantes pour la connexino à la base) :
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
<?php
$filename = "constantes.php4";
if (file_exists ($filename)) require_once ($filename);
set_time_limit  (0);
 
function connect($host = SERVEUR, $login = LOGIN, $pass = PASS, $base = BASE)
{
	$connection = @mysql_pconnect($host, $login, $pass) or die("Connection à ".$host." impossible\n");
	mysql_select_db($base, $connection) or die("Accès à la base ".$base." impossible\n");
	return $connection;
}
 
function formulaire ($page, $login)
{
	$_SESSION = array ();
	$form =
	"
	<html>
	<head>
		<META Http-Equiv=\"Pragma\" Content=\"no-cache\">
	</head>
	<body>
	<form method=\"post\" action=\"$page\">
		<table align=\"center\">
		<tr>
			<td>Identifiant: </td>
			<td align=\"right\">
				<input type=\"text\" name=\"login\" value=\"$login\">
			</td>
		</tr>
		<tr>
			<td>Mot de passe: </td>
			<td align=\"right\">
				<input type=\"password\" name=\"pass\">
			</td>
		</tr>
		<tr>
			<td colspan=\"100%\" align=\"right\">
				<input type=\"submit\" name=\"valider\" value=\"Valider\">
			</td>
		</tr>
		</table>
	</form>
	</body>
	</html>
	";
 
	print ($form);
}
 
function logoff ()
{
	$_POST		=	array ();
	$_SESSION = array ();
	session_unset			();
	session_destroy		();
}
 
function verifSession ($dblink, $infoIdent)
{
	$login = $infoIdent['login'];
	$pass = $infoIdent['pass'];
	$requette0 = "SELECT * FROM user WHERE login='$login' AND pass=password('$pass')";
	$resultat0 = mysql_query($requette0);
	$objet0 = mysql_fetch_object($resultat0);
 
  if($objet0)
  	return TRUE;
  else
  	return FALSE;
}
 
function controleAcces ()
{
	global $_POST;
	global $_SESSION;
	$dblink		= connect();
	$page			= "index.php4";
 
	if (isset ($_GET ['disconnect']))
	{
		logoff ();
		header ("Location:".$page."");
	}
	if (isSet ($_SESSION ['login']) && isSet($_SESSION ['pass']))	//  $_SESSION existe
	{
		if (verifSession ($dblink, $_SESSION))		//couple login/pass correct
		{
			$message = "<center>Vous etes connecté en tant que <b>".$_SESSION ['login']."</b>.     
			<a href=\"".$page."?disconnect\">déconnection</a></b></center><br>";
			print ($message);
			return;
		}
		else			//couple login/pass incorrect
		{
			$message = "<center><b>Session invalide.</b></center><br>";
			print ($message);
			$login = $_SESSION['login'];
		}
	}
	if (isSet ($_POST ['login']) && isSet($_POST ['pass']))		//on a rentré des infos dans le formulaire
	{
		if (verifSession ($dblink, $_POST))			//couple login/pass correct
		{
			$message = "<center><b>Identification correcte.     
			<a href=\"".$page."?disconnect\">déconnection</a></b></center><br>";
			print ($message);
			$_SESSION ['login']	= $_POST['login'];
			$_SESSION ['pass']	= $_POST['pass'];
			$_POST		=	array ();
			return;
		}
		else			//couple login/pass incorrect
		{
			$message = "<center><b>Identifiant et (ou) mot de passe invalide(s).</b></center><br>";
			print ($message);
			$login = $_POST['login'];
		}
	}
 
	formulaire ($page, $login);
	exit;
}
?>
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 19h18   #7
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
J'ai pas regardé ton code en détail
mais j'ai vérifié dans le mien, quand une personne se déconnecte et qu'elle fait précédent, elle n'accède pas au contenu des pages. Elle doit se reconnecter.


Quand une personne soumet le formulaire d'authentification, si les login / password sont bons:
* j'initialise les variables de sessions
* elle est redirigée vers une autre page à laquelle elle ne peut accéder que si les variables de sessions. Dans le cas contraire elle est redirigée vers le formulaire.

j'espère que ça pourra t'aider
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 09h31   #8
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Je n'ai pas de page spécifique pour le formulaire d'identification. Peut être est-ce pour ça. JE vais essayer de suivre tes conseils. Je te dirai si c'éétait bien ça. A priori ça doit l'être puisque tu n'as pas de problème.
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 11h56   #9
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Je suis désolé de vous casser les b... avec ça mais je nage complètement.
J'ai simplifié au maximum. J'ai fais une page index.html qui correspond au formulaire d'identification qui envoie à une page menu.php4 que l'on ne peut voir que si l'on est identifié correctement. Il y a une vérification dans la base de données. Ensuite je navigue tranquillement.
Lorsque je me déconnecte, je suis rebasculé sur la page index.html. Lorsque je fais précédent, je reste sur cette page index.html donc tout va bien. Mais lorsque, à force de cliquer sur précédent, je reviens à la page menu.php4 qui a été appelée après le remplissage du formulaire d'identification, le navigateur me dit que je ne peux accéder à cette page qu'en renvoyant des informations. Je valide et me voilà reconnecté. Alors que j'efface bien les variables de session et même les $_POST.
J'ai vraiment besoin d'un petit tuyau, merci d'avance.
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 13h38   #10
Membre à l'essai
 
Inscription : novembre 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 26
Points : 21
Points : 21
à vrai dire, l'explorateur a garder en mémoire les données qu'il a passé en post.
et quand il dit qu'il ne peut pas afficher la page qu'en renvoyant les informations. si tu valide il renvoye les données qu'il a déja envoyer en post en arrivant sur cette même page et donc se reconnecte sur le site.
avec même logn et mot de pass, il est pas impossible que le numéro de session ai changé.
vérifie si les SID sont identiques.
azraelster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 13h44   #11
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Et ben non, c'est le même sid. C'est dommage c'est vrai que ça m'aurait bien arrangé. Merci quand même.
Je continue de chercher.
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h05   #12
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Il y a un truc qui n'est sûrement pas normal. J'ai toujours le même sid même après m'être déconnecté et reconnecté avec un user différent. Pour que je puisse obtenir un sid différent il faut que je ferme et réouvre le navigateur.
Alors ?
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 16h35   #13
Membre régulier
 
Développeur informatique
Inscription : octobre 2002
Messages : 79
Détails du profil
Informations personnelles :
Âge : 35

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2002
Messages : 79
Points : 97
Points : 97
J'ai déjà eu ce problème, résolu en utilisant ceci pour la déconnexion :

Code :
1
2
3
4
5
6
  session_start();  
  $_SESSION = array();  
  if (isset($_COOKIE[session_name()])) {  
    setcookie(session_name(), '', time()-42000, '/');
  }    
  session_destroy();
Sinon, quelques remarques par rapport à la fonction ControleAcces:

- quelle est l'utilité de revérifier à chaque page le login et le mot de passe ?
- il y a des possibilités d'injection SQL,
- $_POST et $_SESSION sont des super-globaux : pas besoin de les déclarer avec 'global'
CiTriX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 17h38   #14
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Merci je vais essayer ça ce week end.
Je croise les doigts.
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2007, 20h57   #15
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 124
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 124
Points : 39
Points : 39
Je galère.
J'ai repris presque à zéro. J'ai repris le cheminement qui est décrit sur developpez.com à propos de la sécurisation des sessions avec base de données.
Malheureusement, je rencontre le même problème. J'ai fait quelques changements pour ne pas à avoir à installer l'extension PDO, cela vient peut être de là.
Comme les problèmes que je rencontre ne correspondent pas vraiment titre du post, je vais continuer de bosser et j'ouvrirai un nouveau un nouveau post dont l'intitulé sera plus adapté.
En tout cas, merci aux personnes qui m'ont apporté leur aide.
bressan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h07.


 
 
 
 
Partenaires

Hébergement Web