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/07/2006, 13h36   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
Par défaut Perte des variables de sessions

Bonjour,

J'ai un petit problème lorsque je passe du script login.php au script admin.php (je mets les deux script en dessous), en faite print_r($_SESSION) dans login.php me renvois bien le tableau $data, mais print_r($_SESSION) dans admin.php ne me renvoit rien du tout ... Je ne vois absolument pas pourquoi, dans les deux script la session est ouverte, et rien ne la ferme.

Si quelqu'un à une idée, une suggestion, ou même un conseil, je suis preneur, merci d'avance .


login.php
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
<?php session_start(); ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
		<title>Login en cours</title>
		<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="block">
<?php
 
 if(empty($_POST['log']) or empty($_POST['pass'])) {
 	echo ('<p>Login ou password incorect.</p><p><a href="index.php">Retour</a></p>');
 	echo ('<p>CODE 002</p>');
 	session_unset ();
 	session_destroy();
 	exit;
 }
 
 else {
	include('../inc/opendbadmin.inc.php');
	$query = 'SELECT * FROM user WHERE login="'.$_POST['log'].'";';
	$res = sqlite_query($db,$query);
	$data = sqlite_fetch_array($res);
	sqlite_close($db);
}
 
if (empty($data)) {
	echo ('<p>Login ou password incorect.</p><p><a href="index.php">Retour</a></p>');
	echo ('<p>CODE 003</p>');
	session_unset ();
 	session_destroy();
 	exit;
}
 
elseif ($_POST['pass'] != $data['password']) {
	echo ('<p>Login ou password incorect.</p><p><a href="index.php">Retour</a></p>');
	echo ('<p>CODE 004</p>');
	session_unset ();
 	session_destroy();
 	exit;
}
 
else {
$_SESSION = $data;
echo ('
<p>Vous etes identifié</p>
<p><a href="admin.php">Acceder à l\'interface</a></p>');
print_r($data);
}
?>
</div>
</body>
</html>


admin.php
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
<?php session_start(); ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
       <title>Page d'administration</title>
       <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="block">
<?php
if(isset($_SESSION['id'])) {
	session_destroy();
	echo('tricheur ! Code: 001');
	exit;
}
else {
	print_r($_SESSION);
}
?>
</div>
</body>
</html>
Le code n'est pas commenté, et je m'en excuse, toutefois voila la structure de la table "user" :

Code :
TABLE user (id INT(3), login VARCHAR(8), password VARCHAR(8), nom TINYTEXT)
Merci d'avance du temps que vous voudriez bien me consacrer.

Bastien.
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h48   #2
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Citation:
Envoyé par Dayom
A remplacer par quelque chose du genre :
Code :
$_SESSION["data"] = $data;
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 13h53   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
Meme si data est déja un tableau ?
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 14h33   #4
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Citation:
Envoyé par Dayom
Meme si data est déja un tableau ?
Oué, même
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 15h36   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
Ca fonctionne, sauf que sur la page d'après je dois faire un

Code :
$_SESSION = $_SESSION['data'];
pour que les choses rentrent dans l'ordre ... Merci beaucoup !

Au faite, pourquoi quand j'actualise la page il perd les variables de sessions ? :'( C'est normal ?
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 15h45   #6
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Citation:
Envoyé par Dayom
Ca fonctionne, sauf que sur la page d'après je dois faire un

Code :
$_SESSION = $_SESSION['data'];
pour que les choses rentrent dans l'ordre ... Merci beaucoup !

Au faite, pourquoi quand j'actualise la page il perd les variables de sessions ? :'( C'est normal ?
N'affecte pas $_SESSION comme ça (sans les crochets) ! Les variables de session ne fonctionnent pas correctement avec les références (en français : gaffe aux tableaux)
A la limite tu peux faire ça pour que ça marche comme tu voulais :
Code :
1
2
3
foreach($data as $key=>$val) {
  $_SESSION[$key] = $val;
}
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 16h16   #7
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
Quelque chose doit coincer dans le script ... je le reposte tel qu'il est actuellement :

login.php
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
 
<?php session_cache_limiter('private_no_expire'); session_start(); ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
		<title>Login en cours</title>
		<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="block">
<?php
 
/* $_POST['log'] et $_POST['pass'] sont deux variables, respectivement un login et un password, venant d'un formulaire. */
 
//On test si aucune des deux variables est vide, si c'est le cas on ferme la session et on arrète le script.
 if(empty($_POST['log']) or empty($_POST['pass'])) {
 	echo ('<p>Login ou password incorect.</p><p><a href="index.php">Retour</a></p>');
 	echo ('<p>CODE 001</p>');
 	session_unset ();
 	session_destroy();
 	exit;
 }
 
 //On se connecte a la base de donnée et on récupère la ligne qui correspond au login fourni.
 else {
	include('../inc/opendbadmin.inc.php');
	$query = 'SELECT * FROM user WHERE login="'.$_POST['log'].'";';
	$res = sqlite_query($db,$query);
	$data = sqlite_fetch_array($res);
	sqlite_close($db);
}
 
//Si aucune ligne ne correspond, le login est inconnu, on ferme donc la session et on arrète le script.
if (empty($data)) {
	echo ('<p>Login ou password incorect.</p><p><a href="index.php">Retour</a></p>');
	echo ('<p>CODE 002</p>');
	session_unset ();
 	session_destroy();
 	exit;
}
 
//On verifie que le password de la base et celui fourni correspondent, si ce n'est pas le cas on ferme la session et on arrète le script.
elseif ($_POST['pass'] != $data['password']) {
	echo ('<p>Login ou password incorect.</p><p><a href="index.php">Retour</a></p>');
	echo ('<p>CODE 003</p>');
	session_unset ();
 	session_destroy();
 	exit;
}
 
//Si on arrive ici, c'est que tout va bien, on déclare donc les variables de sessions et on affiche le lien pour la page suivante.
foreach($data as $key=>$val) {
  $_SESSION[$key] = $val;
}
echo ('<p>Vous etes identifié</p><p><a href="admin.php">Acceder à l interface</a></p>');
 
//Un petit test de routine pour verifier que tout va bien
echo ('Bonne visite '.$_SESSION['nom'].'.');
 
//A ce moment $_SESSION['id'] = '001'.
 
?>
</div>
</body>
</html>

admin.php
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
 
<?php session_cache_limiter('private_no_expire'); session_start(); ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
       <title>Page d'administration</title>
       <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
 
<?php
 
//On verifie que $_SESSION['id'] n'est pas vide pour éviter que des personnes sautent la phase d'identification, si c'est le cas on ferme la session et on arrète le script.
if(empty($_SESSION['id'])) {?>
	<div id="block">
	<p>Entrée non autorisée</p>
	<p><a href="index.php">Retour</a></p>
	<p>CODE 004</p>
	<?php
	session_unset();
	session_destroy();
	exit;
}
 
//Si tout va bien on affiche le panneau.
else {
	<div id="adminblock">
		<div id="sidebar">futur liste ...</div>
		<div id="content"></div>
		<div id="footer"></div>
	</div>
}
 
?>
 
</body>
</html>
Le problème reste le même la variable $_SESSION est vide dans admin.php.

Est-ce parcequ'il faut eviter d'utiliser la variable $_SESSION['id'] ? Je n'ai plus d'idée >.<
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 16h22   #8
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
fais un print_r($_SESSION) au début de admin.php
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 17h17   #9
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
print_r($_SESSION) n'affiche rien ...
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 18h00   #10
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

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

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
tu l'as fait ou ce print_r ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2006, 18h07   #11
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
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
 
<?php session_cache_limiter('private_no_expire'); session_start(); ?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
       <title>Page d'administration</title>
       <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
 
<?php
//Le test pour voir si ça fonctionne
print_r($_SESSION);
//Et ça ne fonctionne pas ...
 
//On verifie que $_SESSION['id'] n'est pas vide pour éviter que des personnes sautent la phase d'identification, si c'est le cas on ferme la session et on arrète le script.
if(empty($_SESSION['id'])) {?>
	<div id="block">
	<p>Entrée non autorisée</p>
	<p><a href="index.php">Retour</a></p>
	<p>CODE 004</p>
	<?php
	session_unset();
	session_destroy();
	exit;
}
 
//Si tout va bien on affiche le panneau.
else {
	<div id="adminblock">
		<div id="sidebar">futur liste ...</div>
		<div id="content"></div>
		<div id="footer"></div>
	</div>
}
 
?>
 
</body>
</html>
ici
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 00h09   #12
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 25
Points : 14
Points : 14
D'accord ... je dois avouer ne pas tout comprendre ... j'ai recopié le même script, a la lettre pres (CTRL A + CTRL C) dans une autre page (que j'ai appelé test.php), j'ai fait pointé login.php sur test.php, et ca fonctionne ...

Quand le dieu de l'informatique n'est pas avec nous ...
Dayom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 11h04   #13
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

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

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Problème résolu ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo 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 04h43.


 
 
 
 
Partenaires

Hébergement Web