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 21/06/2006, 15h59   #1
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Par défaut [Sécurité] Problème de valeur de session

Bonjour,

J'ai un formulaire, avec un champ dont la valeur par défaut est le contenu d'une variable session (ou tout au moins c'est ce que j'aimerais)

Au début du script, j'essaie d'initialiser la variable session de la manière suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
       session_start();
 
	if(isset($_POST['filtre_no_adh'])) 
	{ 
		$_SESSION['no_adh'] = $_POST['filtre_no_adh']; 
	} 
	else 
	{
		if(!isset($_SESSION['no_adh']))
		{
				$_SESSION['no_adh'] = '';
		}	
	}
Or mon champ est tout le temps à vide : pourquoi ?
Est-ce qu'uns session se termine lorsqu'on met "?>" ? (je ferme les balises php après le traitement ci-dessus, et je les réouvre pour affecter la valeur dans le champ de saisie)

Merci d'avance.
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 18h06   #2
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
Salut,
Citation:
Envoyé par navis84
Or mon champ est tout le temps à vide : pourquoi ?
vu que ton code PHP m'a lair bon à première vue, je pencherais pour un problème avec ton formulaire html
Citation:
Envoyé par navis84
Est-ce qu'uns session se termine lorsqu'on met "?>" ?
Non !
Non seulement, elle ne se termine pas quand tu mets ?>, mais elle ne se termine pas non plus quand le script est terminé.
Une session ne se termine que lorsqu'elle expire (inactivité pendant X secondes), ou lorsque tu apelles explicitement
Code :
1
2
 
session_destroy();
c'est l'avantage des sessions (les valeurs sont conservées de script en script)
Fais voir le code html de ton formulaire ?
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 18h09   #3
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
Code :
1
2
3
4
5
6
7
8
9
10
       session_start();
 
	if(isset($_POST['filtre_no_adh'])) 
	{ 
		$_SESSION['no_adh'] = $_POST['filtre_no_adh']; 
	} 
	else 
	{
		$_SESSION['no_adh'] = '';
	}
aurait suffit, a priori c'est ta variable post qui n'est pas déclarée.

fait un dans ta page pour voir ce que tu as dedans.
__________________
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 22/06/2006, 09h09   #4
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Merci à vous deux pour votre aide.

Voici les précisions que vous m'avez demandées, avec les étapes d'un scénario habituel :

1. L'utilisateur arrive sur la page en vue de saisir le formulaire et la session s'ouvre. $_POST contient Array().

2. L'utilisateur envoie le formulaire. $_POST contient : Array ( [PHPSESSID] => 0a7648fb358773af0a700dc36d659e78 [filtre_no_adh] => 26 [bt_filtre] => Effectuer la recherche )

3. Je clique sur OK en face de l'url pour recharger la page. $_POST contient Array().

Code :
1
2
3
4
5
Voici plus en détail mon formulaire :
<form name="frm_filtre" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
     <input type='text' name='filtre_no_adh' size='10' maxlength='10' value='<?php echo $_SESSION['no_adhes']; ?>' />
     <input type='submit' name='bt_filtre' value='Effectuer la recherche' />
</form>
Voyez-vous un souci à ce niveau ?

PS : j'ai essayé de mettre le contenu de la variable session dans une variable, que je mets dans le contenu de la zone de texte, et la valeur s'affiche une fois dans la zone de texte, alors que ce n'est pas le cas avec la variable session.
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 09h32   #5
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
Citation:
1. L'utilisateur arrive sur la page en vue de saisir le formulaire et la session s'ouvre. $_POST contient Array().
normal.

Citation:
2. L'utilisateur envoie le formulaire. $_POST contient : Array ( [PHPSESSID] => 0a7648fb358773af0a700dc36d659e78 [filtre_no_adh] => 26 [bt_filtre] => Effectuer la recherche )
parfait.

Citation:
3. Je clique sur OK en face de l'url pour recharger la page. $_POST contient Array().
normal.

quand tu envoie le formulaire, la page qui arrive contient des variables post. mais si tu recharges la page ou passe à la suivante, il n'y a plus de variable post, ce qui est normal vu que tu n'as pas relancé de formulaire.

formulaire = variable post sur la page qui arrive et c'est tout

Donc il faut que tu ta pages tu récuperes la variable post et que tu la stocke dans une variable de session et que tu n'utilises que la variable de sessions.
__________________
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 22/06/2006, 09h35   #6
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Oui, je suis bien d'accord avec ça. Et je trouve tout ce qui touche à la variable $_POST normal. Je décrivais juste le scénario en répondant à vos questions.

Par contre, comme je l'explique dans mes premiers messages, ma variable de session est vide lorsque je veux la réutiliser comme valeur par défaut dans le formulaire, ou lorsque je reviens sur la page. Et c'est à ce niveau que se situe le problème.
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 09h46   #7
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
fais tu des session_start(); au début de chaque page ?

rebelotte tu refais un print_r($_SESSION); et tu nous dit quand est-ce que tu "perds" ta valeur de session
__________________
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 22/06/2006, 09h51   #8
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Citation:
Envoyé par Maxoo
fais tu des session_start(); au début de chaque page ?
Oui. En l'occurence je n'utilise que cette page pour le moment, mais elle utilise bien session_start() au tout début.

Citation:
Envoyé par Maxoo
rebelotte tu refais un print_r($_SESSION); et tu nous dit quand est-ce que tu "perds" ta valeur de session
Etape 1 : Array ( [no_adhes] => )
Etape 2 : Array ( [no_adhes] => 28000156 )
Etape 3 : Array ( [no_adhes] => )

Je ne comprends pas pourquoi la variable devient vide, alors que je ne la détruis nulle part...
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 09h55   #9
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
Code :
1
2
3
4
5
6
7
8
	if(isset($_POST['filtre_no_adh'])) 
	{ 
		$_SESSION['no_adh'] = $_POST['filtre_no_adh']; 
	} 
	else 
	{
		$_SESSION['no_adh'] = '';
	}
ca serait pas la qu'il repasse une deuxieme fois et comme y a pas de POST il écrase par "" ?

car la deuxieme fois ton POST ne vaut rien.

enleve le else, car les sessions sont déja alloué de toute facon. et quand tu fais un session_start tout a début, tu n'as rien dans les sessions.

++
__________________
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 22/06/2006, 10h01   #10
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Mon code initial était :

Code :
1
2
3
4
5
6
7
8
9
10
11
        if(isset($_POST['filtre_no_adhes'])) 
	{ 
		$_SESSION['no_adhes'] = $_POST['filtre_no_adhes']; 
	} 
	else 
	{
		if(!isset($_SESSION['no_adhes']))
		{
				$_SESSION['no_adhes'] = '';
		}	
	}
Que ce soit avec ton code ou celui ci-dessus, j'ai toujours le même problème...
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 10h04   #11
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
Code :
1
2
3
4
5
if(isset($_POST['filtre_no_adhes'])) 
{ 
	echo 'je suis passé par la !!';
	$_SESSION['no_adhes'] = $_POST['filtre_no_adhes']; 
}
test ca, et dis moi si ca passe la sur la troisieme page.
et sinon tu n'as pas d'autre endroit ou $_SESSION['no_adhes'] = quelquechose ?
__________________
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 22/06/2006, 10h07   #12
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Cela ne passe pas sur la 3e page.

Citation:
Envoyé par Maxoo
et sinon tu n'as pas d'autre endroit ou $_SESSION['no_adhes'] = quelquechose ?
Non, nulle part...
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 10h19   #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
whaa ... tu as pas un session_destroy ?
le plus simple si c'est possible c'est que tu montres tout ton code maintenant, car sinon je vois pas.

et c'est pas un probleme de ton navigateur ? on peut pas nous tester en ligne ?
__________________
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 22/06/2006, 10h28   #14
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Citation:
Envoyé par Maxoo
et c'est pas un probleme de ton navigateur ? on peut pas nous tester en ligne ?
J'ai testé sous IE et Firefox : même résultat.
De plus, le script est en intranet, donc impossible de le consulter en ligne.

Citation:
Envoyé par Maxoo
whaa ... tu as pas un session_destroy ?
Non.

Citation:
Envoyé par Maxoo
le plus simple si c'est possible c'est que tu montres tout ton code maintenant, car sinon je vois pas.
Je pense qu'avant de poster mon script (qui est assez long), je vais essayer de le réécrire afin de le débuguer.

Je vous tiens au courant et encore merci pour l'aide.
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 10h36   #15
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
pas de probleme !!

fait des echo partout pour débugger, je fais comme ça moi et j'arrive à piger par ou il passe.

et je print ca à chaque début de page :
Code :
1
2
3
echo '$_POST :<pre>'; print_r($_POST); echo '</pre><br>';
echo '$_GET :<pre>'; print_r($_GET); echo '</pre><br>';
echo '$_SESSION :<pre>'; print_r($_SESSION); echo '</pre><br>';
__________________
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 22/06/2006, 10h36   #16
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Bon finalement, j'ai trouvé la ligne qui fait défaut :

Mais je ne comprends pas pourquoi cela réinitialise la variable session car je ne l'appelle pas... As-tu une explication ?
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 10h41   #17
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
ah ah !!

oki, c'est à cause d'un clause de php, tu as register_global à 1 (ON) je parie et du coup dans le script ca fout le dawa.

en gros quand on a register_global à 1, $toto = $_GET, $_POST, $_SESSION du meme nom.

va voir ce post si ca t'interesse : http://www.developpez.net/forums/sho...d.php?t=169399

sinon pour ta solution : soit changer de nom soit désactiver register_global, car c'est une faille de sécurité quand meme
__________________
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 22/06/2006, 10h44   #18
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
En effet, je viens de regarder le php.ini et register_global est bien à 1. C'est la première fois ou presque que je vais fouiller dans ce fichier !

Pour l'instant, je change le nom de ma variable session.

Par défaut, le register_global doit être à 0, non ?
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 10h47   #19
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
Citation:
Envoyé par navis84
Par défaut, le register_global doit être à 0, non ?
oui logiquement par défaut et pour des regles de sécurité il doit etre a 0, mais en fait la plupart des trucs le mette à 1, comme ca les nouveaux sont pas habitué à écrire $_POST[toto], et peuvent écrire $toto à la place.

mais c'est SUPER déconseillé. change le nom de ta variable mais change aussi à 0 register_globals, car comme ca tu es sur que les prochaines erreurs ne viendront pas de la
__________________
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 22/06/2006, 10h48   #20
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
OK. Et bien merci beaucoup pour ta patience et tes explications ! C'est très sympa !
@+
navis84 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 04h20.


 
 
 
 
Partenaires

Hébergement Web