Pb avec la fonction session_start()

Petit nouveau ! | 6 Messages

02 nov. 2006, 09:37

J'ai créé 2 pages en php pour tester l'utilisation de variables de session. Ca ne marche pas (mon site est hébergé par free).

Page Essai.php contenant :
<body>
<?
session_start();
session_register("Titre");
$_SESSION['Titre']="Le cinéma de grand-père";
?>
<br>
<?
?>
<a href="Essai1.php">Cliquer ici</a>
<br>
</body>

Page Essai1.php contenant :
<body>
<?
session_start();
echo $_SESSION['Titre'];
?>
</body>

Voici les messages d'erreur qui s'affichent :
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/109/free.fr/c/d/cherlab/Essai.php:9) in /mnt/109/free.fr/c/d/cherlab/Essai.php on line 10

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/109/free.fr/c/d/cherlab/Essai1.php:9) in /mnt/109/free.fr/c/d/cherlab/Essai1.php on line 10


Et bien sûr, le titre du film (Le cinéma de grand-père) ne s'affiche pas dans la page Essai1.php

Je n'arrive pas à trouver de solution obtenir l'affichage de la variable de session dans ma page Essai1.php, après de multiples essais inutiles.
Quelqu'un pourrait-il me suggérer une solution ?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

02 nov. 2006, 09:44

Le code d'ouverture d'une session, tout comme l'envoi d'un header,
nécessite d'être placé au sommet de ta page.

À en juger par la présence de la balise <body> avant l'appel de session_start()
et par la nature du message d'erreur qui t'est retourné, je devine que ce n'est pas le cas... ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 nov. 2006, 11:13

Le code d'ouverture d'une session, tout comme l'envoi d'un header, nécessite d'être placé au sommet de ta page.
Juste une petite précision, ce n'est pas une "nécessité" de le placer au sommet, mais c'est quand même plus simple. Il suffit simplement de l'avoir placé avant de faire appel à $_SESSION et/ou d'avoir commencé à envoyer du code au navigateur (sous quel que forme que ce soit : comme avec les header)

Le message d'erreur est clair à ce sujet : "headers already sent" > le flux html a déjà été envoyé.

Et pour en revenir à mon histoire, rien n'empêche donc d'avoir un code php de 100 lignes sans flux html (ni echo, ni print, ni retour à la ligne en dehors des balises php, etc.) qui se terminerait par le session_start() suivi de html ou d'un header() :
<?php

// ... 97 lignes de codes php

session_start();
$_SESSION['var'] = $resultatDuCode;
header("Location: page.php");
?>
C'était la minute culturelle (?) de Ryle ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

02 nov. 2006, 11:22

rien n'empêche donc d'avoir un code php de 100 lignes sans flux html
(ni echo, ni print, ni retour à la ligne en dehors des balises php, etc.)
qui se terminerait par le session_start() suivi de html ou d'un header()
Absolument !
Mais c'est tout de même jouer avec le feu... :wink:

Petit nouveau ! | 6 Messages

02 nov. 2006, 15:27

*Merci pour vos réponses. J'ai effectivement résolu mon problème en déplaçant le "session_start" vers la toute première ligne de ma page php.