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 29/08/2006, 18h52   #1
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Par défaut Problème de session

Bonjour.

Je suis entrain faire un site pour une boîte et j'ai des soucis de cession.
Dans mon dossier "ReseauxSante" j'ai ma page index.php dans laquelle j'ai un menu.
les pages sont appelées avec include du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<dt><a href="index.php?page=log"><img src="images/menu/identite.GIF" border="0" onMouseover="this.src='images/menu/identiteh.GIF'"; onMouseout="this.src='images/menu/identite.GIF'"></a></dt>
<?php 
if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];  
 switch($page)
{
//menu horizontal
case 'accueil': include ('accueil.php');break;
case 'contacts': include ('contacts.php');break;
 
//menu vertical
case 'log': include ('membres/login.php');break;
case 'change_passwd': include ('membres/change_passwd.php');break;
case 'inscription': include ('membres/membre_nouveau.php');break; 
case 'enreg_nouveau': include ('membres/enreg_nouveau.php');break;
case 'enreg_nouveau1': include ('membres/enreg_nouveau1.php');break;
case 'abo': include ('membres/abonnements.php');break;
 
case 'reseaux1': include ('reseaux_1.php');break;
case 'reseaux': include ('reseaux.php');break;
} 
?>
Quand je me logg pas de problème. Le problème il est toujours pas là mais j'y viens.
ma page log.php qui est dans un sous dossier "Membres"
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
  require('connect.php');
  require_once('fns_validation_data.php'); 
?>
<p style="margin-left:10px; margin-top:10px"><br>
<!-- S'identifier -->
<form name="identite" method="Post">
  <table bgcolor='#cccccc' align="center">
   <colgroup width=150>
    <colgroup width=150>
   <tr>
     <td colspan=2 class=tdmin align="center"><br>Identifiez-vous ici</td>
   <tr>
     <td class=tdmin align="right">Nom utilisateur :</td>
     <td><input type="text" name="username"></td></tr>
   <tr>
     <td class=tdmin align="right">Mot de passe :</td>
     <td><input type="password" name='password'></td></tr>
   <tr>
     <td colspan=2 align="center">
     <input type="submit" value="Valider" style="height:20px; font-size:9px"></td></tr>
   <tr>
     <td class=tdmin><a href="forgot_form.php">Mot de passe oublié ?</a><br><br></td>
     <td class=tdmin><a href="index.php?page=change_passwd">Changer le mot de passe</a><br><br></td>
   </tr>
 </table>
 
<?php
   $val='';
   if(isset($_POST['username']))      $ident=$_POST['username'];
   else	$ident = "";
   if(isset($_POST['password']))     $passwd=$_POST['password'];
   else	$passwd = "";
   $passwd = Sha1($passwd);
   // on vérifie si l'identifiant et le mot de passe sont renseignés
   if (( !empty($_POST['username']) && !empty($_POST['password']))) { 
	$sql = mysql_query("SELECT * FROM admin WHERE nom_utilisateur='".$ident."' AND password='".$passwd."'",$connexion);
	if (mysql_num_rows($sql) > 0)
	{
	   $val="ok";
	   $res = mysql_fetch_array($sql);
	   $utilisateur = $res['nom_utilisateur'];
           $acces = $res['acces'];
	   $_SESSION['utilisateur'] = $utilisateur;
	   $_SESSION['acces'] = $acces;
	   echo '<p align="center">Bonjour <b>'. $utilisateur .'</b> vous êtes connecté(e).';
	} 
	else {
	   $val="rien";
	}
   }
   if ($val=='rien'){
	echo '<p align="center"><font face="verdana" size="1" color="red"><b>Nom utilisateur ou mot de passe invalide</b></font>';
   }
?>
</form>
Dans mon menu, je clic sur un bouton où il faut saisir un code personnel pour avoir accès à des renseignements payants.

Le problème il est là: Même si le code est correcte j'ai des messages d'erreurs et je ne sais pas comment les traiter.
le code de ma page Reseaux_1.php où le code d'accès est demandé:
Quan l'accès est correct ça doit ouvrir une page reseaux.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
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
<?php
// connection à la base de données
require ('connect.php');
?>
<style type="text/css">
.hidden {
    display: none;
}
.visible {
    display: inline;
}
</style>
<Script Language="Javascript">
function hide(identifiant) 
{
        if (document.getElementById(identifiant).className == "hidden") {
            document.getElementById(identifiant).className = "visible";
        } else {
            document.getElementById(identifiant).className = "visible";
            document.getElementById(identifiant).className = "hidden";
        }
}
</script>
 
<p align="center">
 
<form name="interro" method="Post" action="index.php?page=reseaux">
<font color="black" size="2" face="Tahoma" >
<table border="0" style="margin-left:40px; margin-top:20px;">
	<tr>
		<td align="left"><font face="verdana" size="1">
			Pour accéder à la liste des réseaux vous devez avoir souscrit un <a href="index.php?page=abo">abonnement</a> aux réseaux. 
			<br><br>
			Pour accéder à la liste, entrer le code confidentiel qui vous a été communiqué puis valider.<br><br>
		</td>
	<tr>
		<td align="left"><font face="verdana" size="1">Code confidentiel : <input type="text" name="codeconf" value="">
			<input type="submit" name="valid" value="Valider" style="height:20px; font-size:9px">
			<br><br>
		</td>
	</tr>
	<tr>
		<td><font face="verdana" size="1">Code d'accès oublié ?
			<span class="choix" onclick="hide('mondiv')"><font color="blue">cliquer ici</span></td>
 
</table>
 
<!-- 
acces aux réseaux
//--> 
<?php
   $val='';
   if(isset($_POST['codeconf']))      $code=$_POST['codeconf'];
   else	$code = "";
   // on vérifie si l'identifiant et le mot de passe sont renseignés
   if (!empty($_POST['codeconf'])) { 
	$sql = mysql_query("SELECT * FROM admin WHERE acces ='".$code."'",$connexion);
	if (mysql_num_rows($sql) > 0)
	{
	   $val="ok";
	   $res = mysql_fetch_array($sql);
           $acces = $res['acces'];
	}
	else {
	   $val="rien";
	} 
   }
   if ($val === "rien"){
      ?><font face="verdana" size="1" color="red"><b>Code d'accès invalide</b></font><?
   }
?>
</form>
 
<!-- 
form pour récupérer le code utilisateur
//-->
<div id="mondiv" class="hidden">
<form name="oubli" method="POST" action="index.php?page=reseaux">
<table bgcolor="gold" style="margin-left:210px; margin-top:20px;">
	<tr>
		<td><font face="verdana" size="2">
		<?php
//le nom utilisateur doit être récupéré lors de l'ouverture de session (par cookie?)
  $username='philippe';
		$utilisateur = $username;
		$result_sql = mysql_query('Select * From admin ',$connexion);
		$nombreligne = mysql_num_rows($result_sql);
		for ($i = 0; $i < $nombreligne; $i++) 
		{
			$code = mysql_result($result_sql,$i,"acces");
			$utilisateurbdd = mysql_result($result_sql,$i,"nom_utilisateur");
			if ($utilisateurbdd === $username){
				echo "Votre code confidentiel :<b> $code";
			}
			}
		?>
		</b></td>
	</tr>
</table>
</form>
</div>
le messages affichés:
Code :
1
2
3
4
5
6
 
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\weblocal\sites\reseauxsante\index.php:10) in c:\weblocal\sites\reseauxsante\reseaux.php on line 2
 
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\weblocal\sites\reseauxsante\index.php:10) in c:\weblocal\sites\reseauxsante\reseaux.php on line 2
 
Warning: Cannot modify header information - headers already sent by (output started at c:\weblocal\sites\reseauxsante\index.php:10) in c:\weblocal\sites\reseauxsante\reseaux.php on line 4
Je sais que c'est un peu long mais j'essaie de fournir le maximum d'infos.

Infos supplémentaires :
ma page login.php est dans un sous dossier et les pages reseaux_1.php et reseaux sont dans le dossier principal.

Est ce là le problème?
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 20h08   #2
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Ca a l'air d'être une erreur banale: je ne vois nul part ou tu mets ton session_start() mais il doit se trouver avant tout autre code (même avant les include).
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 12h38   #3
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Merci.
J'ai oublié un truc. Quand je suis sur ma page reseaux_1.php (là où je dois saisir le code), j'ouvre la page reseaux.php si le code est ok (en principe!!)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form name="interro" method="Post" action="index.php?page=reseaux">
<font color="black" size="2" face="Tahoma" >
<table border="0" style="margin-left:40px; margin-top:20px;">
	<tr>
		<td align="left"><font face="verdana" size="1">
			Pour accéder à la liste des réseaux vous devez avoir souscrit un <a href="index.php?page=abo">abonnement</a> aux réseaux. 
			<br><br>
			Pour accéder à la liste, entrer le code confidentiel qui vous a été communiqué puis valider.<br><br>
		</td>
	<tr>
		<td align="left"><font face="verdana" size="1">Code confidentiel : <input type="text" name="codeconf" value="">
			<input type="submit" name="valid" value="Valider" style="height:20px; font-size:9px">
			<br><br>
		</td>
	</tr>
	<tr>
		<td><font face="verdana" size="1">Code d'accès oublié ?
			<span class="choix" onclick="hide('mondiv')"><font color="blue">cliquer ici</span></td>
 
</table>
et la session elle est sur ma page reseaux.php (celle qui doit s'afficher si le code est ok)
Code :
1
2
3
4
5
6
7
<?php
session_start(); 
if(empty($_SESSION['utilisateur'])) {
      header("Location: index.php?page=reseaux1"); 
      exit;
}
?>
Je me demande si mon problème n'est pas dû à l'emplacement des fichiers
reseaux_1.php et reseaux.php sont dans le dossier principal et log.php est dans un sous dossier "membres"

Je n'ai pas testé ça mais je voudrais avoir ton
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 16h14   #4
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
C'est donc ça qui plante:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<dt><a href="index.php?page=log"><img src="images/menu/identite.GIF" border="0" onMouseover="this.src='images/menu/identiteh.GIF'"; onMouseout="this.src='images/menu/identite.GIF'"></a></dt>
<?php 
if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page'];  
 switch($page)
{
//menu horizontal
case 'accueil': include ('accueil.php');break;
case 'contacts': include ('contacts.php');break;

//menu vertical
case 'log': include ('membres/login.php');break;
case 'change_passwd': include ('membres/change_passwd.php');break;
case 'inscription': include ('membres/membre_nouveau.php');break; 
case 'enreg_nouveau': include ('membres/enreg_nouveau.php');break;
case 'enreg_nouveau1': include ('membres/enreg_nouveau1.php');break;
case 'abo': include ('membres/abonnements.php');break;

case 'reseaux1': include ('reseaux_1.php');break;
case 'reseaux': include ('reseaux.php');break;
} 
?>
En rouge des données HTML sont transmises avant le session_start(). Il doit se trouver avant.
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 16h47   #5
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Mille mercis, je galère là dessus depuis des semaines
philippef 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 10h14.


 
 
 
 
Partenaires

Hébergement Web