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 27/12/2010, 10h27   #1
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Par défaut session_start modifie variable

Bonjour,

J'ai un problème assez bizarre d'autant plus que c'est la première fois que ça me fait ça...

En fait j'ai une variable "$nom_fichier" que je définie à une session. Seulement, ça me modifie le contenu de $nom_fichier juste après le session_start()...

Code :
1
2
3
4
5
6
          echo 'avant session_start() : '.$nom_fichier.'<br /><br /><br />';//retourne "recueil_test.pdf"
          session_start();
           echo 'après session_start(): '.$nom_fichier.'<br />';//retourne "Recueil test"
          $_SESSION['autorisation'] = true;
          $_SESSION['id_fichier'] = $id_fichier;
          $_SESSION['nom_fichier'] = $nom_fichier;
Et honnêtement, je ne vois pas d'où ça peut venir... Quelqu'un aurait-il une idée svp?
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 10h48   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Erreur de débutant. Mettre session_start() tout en haut de page...
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 10h05   #3
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 701
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 701
Points : 3 271
Points : 3 271
Salut

Code :
1
2
3
echo 'avant session_start() : '.$nom_fichier.'<br /><br /><br />';//retourne "recueil_test.pdf"
session_start();
echo 'après session_start(): '.$nom_fichier.'<br />';//retourne "Recueil test"
N'aurais tu pas la directive du php.ini register_global à ON ?
Chose très fortement déconseillée.
Cà à en tout l'air car la variable $nom_fichier (pour ce code) à été écrasée juste après le démarrage de la session, ce que provoque justement cette directive.

Aussi, n'a tu pas eu l'erreur très répandue "Headers already sent by ..." du fait d'avoir fait un echo avant de démarrer la session ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 10h13   #4
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Non, je n'ai pas registre_globals on

ensuite si je n'ai pas eu de message à cause de echo avant session_start() c'est que j'utilise ob_start() / ob_end_flush() (bufferisation de sortie) ce que fait que la page est envoyée en une fois. Justement, ça compresse et evite d'avoir des erreurs de type header already sent.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 10h38   #5
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 701
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 701
Points : 3 271
Points : 3 271
Citation:
Envoyé par radicaldreamer
Non, je n'ai pas registre_globals on
Alors le code d'exemple que tu as mis dans le 1er post n'était pas exactement comme ça, ça me parais impossible.

Jamais $nom_fichier n'aurais dû changé de valeur, pas comme ça d'une ligne à l'autre, sinon d'être écrasé par quelque chose d'autre.
Il y a forcément une explication, et ce n'est pas le fait de déplacer le session_start() si le register_global est bien à Off.

Si tu remets comme c'était, donc avec l'erreur, ce phénomène cacherait quelque chose d'autre à mon sens, pas possible.


Citation:
Justement, ça compresse et evite d'avoir des erreurs de type header already sent.
Chacun fait comme il veut, la dessus aucun problème.
Mais à titre personnel, je préfère 100 fois avoir une erreur dû à l'envoie d'une entête trop top ou lié à une erreur, que de ne rien voir, rien savoir, au moins en phase de développement, modifs, améliorations, etc ...
Après, en production, pourquoi pas.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 10h48   #6
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Citation:
Envoyé par RunCodePhp Voir le message
Alors le code d'exemple que tu as mis dans le 1er post n'était pas exactement comme ça, ça me parais impossible.
Je t'assure que si, mon code était tel quel et mon register_globals est bien à OFF.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 12h11   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 701
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 701
Points : 3 271
Points : 3 271
Citation:
Je t'assure que si, mon code était tel quel et mon register_globals est bien à OFF.
Admettons même que ce soit à Off.
Ne trouve tu pas anormal que cette variable change de valeur alors que le seul et unique code qu'il y a entre les 2 echo est session_start() ?

Pour ma part il y a un truc pas clair.
C'est peut être lié à la bufferisation et de l'erreur que provoquerait le 1er echo, va savoir, mais ça me parait troublant quand même.

Bon, c'est résolu, certes.
Mais un essai comme ci-dessous, donc en revenant un peu comme au départ ne serait pas si inutile (au moins avoir une explication) :
Test 1 : (sans provoquer d'erreur headers already send ...)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
// avant session_start() :
$nom_fichier_avant_1 = $nom_fichier;
$nom_fichier_avant_2 = '';
if (isset($_SESSION['nom_fichier'])) $nom_fichier_avant_2 = $_SESSION['nom_fichier'];
 
session_start();
 
echo 'Valeur avant : '.$nom_fichier_avant_1.'<br />';
echo 'Valeur avant dans la session : '.$nom_fichier_avant_2.'<br />';
 
echo 'Après : '.$nom_fichier.'<br />';
echo 'register_globals : '.ini_get('register_globals').'<br />';
 
exit(); // Point d'arrêt
Test 2 : (avec erreur)
Code :
1
2
3
4
5
6
7
8
9
 
echo 'Avant 1 : '.$nom_fichier.'<br />';
if (isset($_SESSION['nom_fichier'])) echo 'Avant 2 : '.$_SESSION['nom_fichier'].'';
session_start();
 
echo 'Après : '.$nom_fichier.'<br />';
echo 'register_globals : '.ini_get('register_globals').'<br />';
 
exit(); // Point d'arrêt
Ensuite voir un peu ce qu'il se passe, il y a peut être moyen de détecter quelque chose.
Maintenant, reste à voir si tu le temps de prospecter.


D'ailleurs, faire un ob_start() / ob_end_flush() ne devrait pas empêcher de voir cette erreur du echo placer avant le session_start().
Personnellement ça m'arrive d'en faire autant quand je débug, et l'erreur je l'ai quand même si tel est le cas.
Je dirais plutôt que c'est le fait de mettre la directive output_buffering à On qui empêcherait d'avoir ce genre d'erreur, non ?
Je ne sais plus trop, je ne bidouille pas ça tout le temps.

Aussi, as tu bien le session.auto_start à 0 ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 14h46   #8
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Citation:
session.auto_start OFF
J'ai pas trop le temps de prospecter. On me demande trop de chose en même temps au boulot. Et le soir, je suis sur d'autres projets persos en développement donc je vais (pour une fois) pas m'attarder à savoir d'où venait exactement cette erreur.

Citation:
Envoyé par RunCodePhp
Ne trouve tu pas anormal que cette variable change de valeur alors que le seul et unique code qu'il y a entre les 2 echo est session_start() ?
En tout cas: si, je trouve ça bizarre.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer 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 09h54.


 
 
 
 
Partenaires

Hébergement Web