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 19/01/2011, 16h14   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 66
Points : 13
Points : 13
Par défaut Variables de sessions qui disparaissent

Bonjour à tous...

J'ai un problème absolûment agaçant en ce moment : mes variables de sessions ne passent pas d'une page PHP à l'autre. Je m'explique :

le contexte est une base de données qui permet de se connecter en anonyme ou en tant que membre inscrit.
le coté membre anonyme fonctionne, vous l'aurez compris, je m'attaque maintenant aux scripts pour membre inscrit.

Pour la partie membre :
Je pars d'une fenêtre de login classique :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?php
	include "commun/connexion.inc.php";
	//include "commun/auth-config.php";
	//include "commun/authcheck.php";
?>
 
<HTML>
	<HEAD>
		<TITLE>Gestion des opérations</TITLE>
		<META http-equiv="Content-Language" content="fr">
		<META http-equiv="Content-Type" content="text/html; charset=windows-1252">
	</HEAD>
 
	<BODY bottommargin="0" topmargin="20" leftmargin="20" rightmargin="0">
		<B>Titre</B><BR><BR>
		<FORM name="index3" method="post" action="auth.php">   
			Identifiant : <input type = "text" name="Identifiant"/><br/>
			Mot de passe : <input type = "password" name="Password"/><br/>
			<input type="submit" name="valider" value="Connection">
		</FORM>
	</BODY>
</HTML>
Cette fenêtre envoie ensuite à auth.php ce qu'à inscrit le membre en identifiant et mot de passe :

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
 
<?php
	include "commun/connexion.inc.php";
	//include "commun/auth-config.php";
	//include "commun/authcheck.php";
 
	//session_start();
	if (!IsSet($_POST['Password'])){							/*Pas de password saisi*/
		$auth=0;
		$user="moi";
		$pass="";		
		/*On donne ici, les accès de consultation uniquement*/
 
		header("Location : index2.php");
	}
	$pass=$_POST['Password'];
	if (!IsSet($_POST['Identifiant'])){							/*Pas de pseudo saisi*/
		header("Location : index2.php");
	}
	$user=$_POST['Identifiant'];
 
	if (IsSet($_POST['Identifiant']) AND IsSet($_POST['Password'])){
		$sql = "SELECT * FROM utilisateur WHERE
		Identifiant ='".$_POST['Identifiant']."' and Password='".$_POST['Password']."'";
 
		$resultat=mysql_query($sql,$id_link) or die("erreur MySQL :" .mysql_error());
		$nombre=mysql_num_rows($resultat);
		$enreg=mysql_fetch_array($resultat);
		$n_district=$enreg["N0_District"];	
		if (!$nombre || $nombre<1){								/*Password ou Identifiant faux*/
			echo 'Votre identifiant et/ou votre mot de passe sont faux.<br />
			Vous serez en mode de consultation libre uniquement.';
			require ('index2.php');
			exit;
		}
		/*Saisie profil*/
		elseif ($nombre>1 || $nombre<=3){
		//Ouvrir les formulaires auxquels l'utilisateur à accès en fonction de sa qualité
			$_SESSION['IDinscrit']=$user;
			$_SESSION['Passinscrit']=$pass;
			$_SESSION['last_access']=time();
			//echo 'Bonjour '.$user.' !';						/*Les vars sont OK ici aussi*/
			//echo 'Coucou '.$_SESSION['IDinscrit'].' !!';
			require ('consult_m.php');
			exit;
		}
		mysql_close();
	}
?>
Celle-ci fonctionne aussi comme vous pouvez le voir avec mes commentaires.

Enfin, j'arrive sur la fenêtre consult_m.php qui correspond à une page pour les membres inscrits uniquement et c'est là que çà ce corse : Elle ne voit pas les variables de sessions !

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
 
<?php
	include "commun/connexion.inc.php";
	session_start();
	//include "commun/auth-config.php";
	//include "commun/authcheck.php";
?>
 
<HTML>
	<HEAD>
		<SCRIPT language='javascript'>
			function ValideFiltre(Formulaire)
			{
				Formulaire.submit();
			}
		</SCRIPT> 
		<TITLE>Gestion des opérations</TITLE>
		<META http-equiv="Content-Language" content="fr">
		<META http-equiv="Content-Type" content="text/html; charset=windows-1252">
	</HEAD>
 
	<BODY bottommargin="0" topmargin="20" leftmargin="20" rightmargin="0">
	<B>Titre </B><BR><BR>
 
	<?php
 
		$user=$_POST['Identifiant'];
		$pass=$_POST['Password'];
		//echo 'Coucou '.$_SESSION['IDincrit'].' !!';
		/*Connexion membre*/
 
		if (IsSet($_GET['sDistrict'])){ 
			$_SESSION["N0_District"]=$_GET['sDistrict'];
		}else{
			$_SESSION["N0_District"]=isset($_SESSION["N0_District"]) ? $_SESSION["N0_District"] :1;
		}
 
		if (IsSet($_GET['sDomaine'])){ 
			$_SESSION["N0_Domaine"]=$_GET['sDomaine'];
		}else{
			$_SESSION["N0_Domaine"]=isset($_SESSION["N0_Domaine"]) ? $_SESSION["N0_Domaine"] :1;
		}
 
		if (IsSet($_GET['sUC'])){ 
			$_SESSION["N0_UC"]=$_GET['sUC'];
		}else{
			$_SESSION["N0_UC"]=isset($_SESSION["N0_UC"]) ? $_SESSION["N0_UC"] :1;
		}
 
		if (IsSet($_GET['sUser'])){ 
			$_SESSION["N0_Utilisateur"]=$_GET['sUser'];
		}else{
			$_SESSION["N0_Utilisateur"]=isset($_SESSION["N0_Utilisateur"]) ? $_SESSION["N0_Utilisateur"] :1;
		}
 
		if (IsSet($_GET['sMO'])){ 
			$_SESSION["N0_moe"]=$_GET['sMO'];
		}else{
			$_SESSION["N0_moe"]=isset($_SESSION["N0_moe"]) ? $_SESSION["N0_moe"] :1;
		}
 
		$district=$_SESSION["N0_District"];
		$domaine=$_SESSION["N0_Domaine"];
		$UC=$_SESSION["N0_UC"];
		$User=$_SESSION["N0_Utilisateur"];
		$MO=$_SESSION["N0_moe"];	
 
		if(IsSet($_SESSION['IDinscrit']) And IsSet($_SESSION['Passinscrit'])){
			echo 'Elles existent...';
			//$user=$_POST['Identifiant'];												//Vars bien récupérées
			//$pass=$_POST['Password'];
			$user=$_SESSION["IDinscrit"];
			$pass=$_SESSION["Passinscrit"];
			echo $user;
			echo $pass;
 
			print_r($_SESSION); 
			//mysql_connect("localhost",$user,$pass);										//PB de connection
			//mysql_select_db("GESTION2");
..... 
		}
	?>
	</BODY>
</HTML>
Pourriez-vous m'aider SVP ?

Merci beaucoup d'avance à tous.
Zhebulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h22   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Je crois qu'il te faut un session_start(); dans le fichier ou tu cree tes session
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h24   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 44
Points : 9
Points : 9
Lorsque j'utilise une variable de session dans mon cas
sur mon deuxième fichier au tout début voila ce que j'ai
je convertie directement les variable au tout début en variable de session

Code php :
1
2
3
4
 
session_start();
$adresse = htmlspecialchars( $_POST['adresse']);
$_SESSION['adresse'] = $adresse;

je fais donc une conversion de ma variable adresse en variable de session directement

et sur mon troisieme fichier qui est celui de traitement voila mon code

Code :
1
2
3
 
session_start();
$adresse = $_SESSION['adresse'];
je refais une conversion voila comment je les fais marcher de mon côter en espérant que ça puisse t'aider
Irokoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h33   #4
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 66
Points : 13
Points : 13
Bonjour à tous les deux....

Et merci pour la réponse rapide....
Mais dans consult_m.php, j'ai bien un session_start();

J'ai bien essayé d'en mettre un aussi dans auth.php, et php me dit qu'il y a déjà une session ouverte ! C'est pour çà que je l'ai mis en commentaire....

Que faire alors ?
D'un coté sur auth, php me crie dessus, de l'autre les var sessions ne sont pas vues ????
Comprends plus là....

Merci beaucoup d'avance
Zhebulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h59   #5
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
fait toi un débugguer ceci t'affichera le contenu de la variable $_SESSION

Code :
echo '<pre>'.print_r($_SESSION, true).'</pre>';
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 20h00   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 66
Points : 13
Points : 13
Bonjour et merci Helfima

Je met l'instruction dans quelle page et à quel niveau, dans auth.php après que j'aie créé mes variables $_SESSION ? Excuse moi, je suis un peu pommé à force.
Zhebulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 21h20   #7
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
met le apres ton session_start
puis avant d'utiliser un $_SESSION la ou tu as ton problème

tiens cadeau créer un fichier MyDebug.php et met y le code qui suis
c'est une adaptation de mon logger
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
<?php
/**
 * @filesource MyDebug.php
 * @author Helfima
 * @version 1.0
 * Date 19 janv. 2011
 */
 
class MyDebug {
	private static $_instance = null;
	/**
	 * Retourne l'instance
	 * @return MyDebug
	 */
	public static function getInstance(){
		if(is_null(self::$_instance)){
			self::$_instance = new MyDebug();
		}
		return self::$_instance;
	}
 
	protected function logger($mode, $message){
		try {
			throw new Exception('error');
		} catch (Exception $e) {
			$trace = $e->getTrace();
		}
		$log = $mode;
		$log.= ' |Line: '.$trace[1]['line'];
		$log.= ' |File: '.$trace[1]['file'];
		$log.= '<pre>'.print_r($message, true).'</pre>';
		echo $log;
	}
 
	/**
	 * Message de debug
	 * @param string $message
	 */
	public function debug($message){
		$this->logger('DEBUG', $message);
	}
 
	/**
	 * Message de trace
	 * @param string $message
	 */
		public function trace($message){
		$this->logger('TRACE', $message);
	}
 
		/**
	 * Message d'information
	 * @param string $message
	 */
	public function info($message){
		$this->logger('INFO', $message);
	}
 
		/**
	 * Message d'avertissement
	 * @param string $message
	 */
	public function warn($message){
		$this->logger('WARN', $message);
	}
 
		/**
	 * Message d'erreur
	 * @param string $message
	 */
	public function error($message){
		$this->logger('ERROR', $message);
	}
}
exemple d'utilisation
Code :
1
2
$test = array('toto', 'titi', 'tata' => 'cool');
MyDebug::getInstance()->debug($test);
résultat
Code :
1
2
3
4
5
6
7
8
DEBUG |Line: 79 |File: J:\dossier\fichier.php
 
Array
(
    [0] => toto
    [1] => titi
    [tata] => cool
)
comme cela tu sais ou tu as mis ton debug
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 20h09   #8
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 66
Points : 13
Points : 13
Bonsoir Helfima !

C'est fort gentil à toi de me livrer ce petit script.... Par contre, je n'y connais strictement rien en classe donc là (...)

J'ai branché ton script dans auth comme ceci :

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
 
<?php
 
	include "commun/connexion.inc.php";
	session_start();
	$test=$_SESSION;
	MyDebug::getInstance()->debug($test);
 
	if(!IsSet($_POST['Password'])){
		$auth=0;
		$user="root";
		$pass="";
		/*On donne ici les accès en consultation uniquement */
		header ("Location : index2_OK.php");
	}
	$pass=$_POST['Password'];
 
	if(!IsSet($_POST['Identifiant'])){
		header ("Location : index2_OK.php");
	}
	$user=$_POST['Identifiant'];	
 
	if(IsSet($_POST['Identifiant']) And IsSet($_POST['Password'])){
		$sql="SELECT * FROM utilisateur WHERE
		identifiant='".$_POST['Identifiant']."' and password='".$_POST['Password']."'";
 
		$resultat=mysql_query($sql,$id_link) or die ("erreur MySql : ".mysql_error());
		$nombre=mysql_num_rows($resultat);
		$enreg=mysql_fetch_array($resultat);
		$n_district=$enreg["N0_District"];
		if (!$nombre || $nombre<1){
			echo 'Votre identifiant et/ou votre mot de passe sont faux. <br />
			Vous sere en mode de consultation libre uniquement.';
			require ('index2_Ok.php');
			exit;
		}
		/*Saisie profil*/
		elseif ($nombre>1 || $nombre<=3){
			//Ouvrir les formulaires auxquels l'utilisateur à accès en fonction de sa qualité
			$_SESSION['IDinscrit']=$enreg['identifiant'];
			$_SESSION['Passinscrit']=$enreg['password'];
			MyDebug::getInstance()->debug($test);
			//$_SESSION['IDinscrit']=$user;
			//$_SESSION['Passinscrit']=$pass;
			require ('consult_m.php');
			exit;
		}
		mysql_close();
	}
?>
Est-ce bon ?

Ouille ! Apparemment non, j' obtient ceci en message d'erreur :
Citation:
Fatal error: Class 'MyDebug' not found in C:\Program Files (x86)\EasyPHP-5.3.4.0\www\Gestion2\auth.php on line 6
Zhebulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 20h45   #9
Membre du Club
 
Inscription : mars 2003
Messages : 183
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 183
Points : 54
Points : 54
session_start();
doit toujours se trouver sur la première ligne sans "blanc"
__________________
Pour tous les philatélistes
http://timbres-de-france.com/index.php
michel71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 08h29   #10
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 66
Points : 13
Points : 13
Ok, j'ai rectifié, mais çà ne change rien.... J'ai toujours ce message...
Zhebulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 10h34   #11
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
php trouve pas la class = le fichier de la class n'est pas inclus ou erreur de nom
la syntaxe est bonne mais tu as pas inclus le fichier MyDebug.php

Code :
1
2
3
4
5
include "commun/connexion.inc.php";
include "commun/MyDegug.php";// utilise ton nom de fichier utilisé
 
session_start();
MyDebug::getInstance()->debug($_SESSION);

Citation:
Envoyé par michel71 Voir le message
session_start();
doit toujours se trouver sur la première ligne sans "blanc"
c'est pas vrai cela dépend comment tu travaille enfin bref
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 10h44   #12
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 66
Points : 13
Points : 13
Bonjour Helfima...

Quelle étourderie vraiment ! Je me suis directement focalisé sur l'appel de classe, çà m'a notamment appris des choses par rapport à ce contexte, mais d'ici à ce que je fasse des classes...
Bref, après divers remaniements de mon code, suppression d'un session_start() en trop, et vos précieuses explications et aides salvatrices, mes vars de sessions sont enfin bien vues, tout est donc rentré dans l'ordre, mon code fonctionne parfaitement.

Je rebondis toutefois sur l'un des posts précédents à savoir que PHP me signale qu'une session est déjà ouverte et qu'elle sera ignorée à la ligne 2 de consult_m.php, mais, j'utilise mes vars de session dans le code de cette fenêtre .... Que dois-je faire ? Il faut bien que j'aie un session_start() pour voir mes variables, sinon, çà ne marche pas....

Voilà le code incriminé :
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_start();
	include "commun/connexion.inc.php";
	//include "commun/auth-config.php";
	//include "commun/authcheck.php";
?>
 
<HTML>
	<HEAD>
		<SCRIPT language='javascript'>
			function ValideFiltre(Formulaire)
			{
				Formulaire.submit();
			}
		</SCRIPT> 
		<TITLE>Gestion des opérations</TITLE>
		<META http-equiv="Content-Language" content="fr">
		<META http-equiv="Content-Type" content="text/html; charset=windows-1252">
	</HEAD>
 
	<BODY bottommargin="0" topmargin="20" leftmargin="20" rightmargin="0">
	<B>Titre </B><BR><BR>
 
	<?php
 
		/*Connexion membre*/
 
		if (IsSet($_GET['sDistrict'])){ 
			$_SESSION["N0_District"]=$_GET['sDistrict'];
		}else{
			$_SESSION["N0_District"]=isset($_SESSION["N0_District"]) ? $_SESSION["N0_District"] :1;
		}
 
		if (IsSet($_GET['sDomaine'])){ 
			$_SESSION["N0_Domaine"]=$_GET['sDomaine'];
		}else{
			$_SESSION["N0_Domaine"]=isset($_SESSION["N0_Domaine"]) ? $_SESSION["N0_Domaine"] :1;
		}
 
		if (IsSet($_GET['sUC'])){ 
			$_SESSION["N0_UC"]=$_GET['sUC'];
		}else{
			$_SESSION["N0_UC"]=isset($_SESSION["N0_UC"]) ? $_SESSION["N0_UC"] :1;
		}
 
		if (IsSet($_GET['sUser'])){ 
			$_SESSION["N0_Utilisateur"]=$_GET['sUser'];
		}else{
			$_SESSION["N0_Utilisateur"]=isset($_SESSION["N0_Utilisateur"]) ? $_SESSION["N0_Utilisateur"] :1;
		}
 
		if (IsSet($_GET['sMO'])){ 
			$_SESSION["N0_moe"]=$_GET['sMO'];
		}else{
			$_SESSION["N0_moe"]=isset($_SESSION["N0_moe"]) ? $_SESSION["N0_moe"] :1;
		}
 
		$district=$_SESSION["N0_District"];
		$domaine=$_SESSION["N0_Domaine"];
		$UC=$_SESSION["N0_UC"];
		$User=$_SESSION["N0_Utilisateur"];
		$MO=$_SESSION["N0_moe"];	
 
		if(IsSet($_SESSION['IDinscrit']) And IsSet($_SESSION['Passinscrit'])){
			$user=$_SESSION["IDinscrit"];
			$pass=$_SESSION["Passinscrit"];
Zhebulon 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 01h27.


 
 
 
 
Partenaires

Hébergement Web