8795 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaie d'utiliser les sessions PHP pour effectuer un login utilisateur. J'ai bien compris le principe mais en essayant de faire un session_start(); j'ai deux warning et cela ne fonctionne pas, les voici:

"Warning: session_start(): Cannot send session cookie - headers already sent by (output started at f:\program files\easyphp1-8\www\index.php:13) in f:\program files\easyphp1-8\www\user_log_in.php on line 5

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at f:\program files\easyphp1-8\www\index.php:13) in f:\program files\easyphp1-8\www\user_log_in.php on line 5"

Qelqu'un pourait-il m'aider ? La ligne 5 correspond au start_session();

Pour voir le problème : www.dolphin-zone.net section Utilisateur => connexion ...

Le problème est peut être trivial mais bon ... je ne trouve pas pour l'instant, merci d'avance pour vos réponses,

Eric.
Bonjour Dolphin,

L'instruction PHP session_start() doit être placée en premier dans ton document (sinon cela génére les 2 erreurs que tu nous cites ci-dessus).

Solution :

<?php session_start(); ?>
<!DTD ...
<html> ...


Bonne soirée à toi. Romain
Modifié par yodaswii (08 May 2006 - 20:37)
Merci de ta réponse mais cela ne change rien de placer cette instruction en première ligne.

Le page en question est incluse dans la page principale nommée index.php, voici comment je procède :

1- Dans un menu DHTML (dans index.php) :

(...)
<li><a href="index.php?page=user_log_in"><img src="Images/cadenas.gif" border="0">&nbsp;Connexion</a></li>
(...)

2- Un peu plus loin (dans index.php) :

(...)

<!-- =================================== -->
<!-- FRAME DIV Corps -->
<!-- =================================== -->
<div class="frame">

<?php if (!isset($_GET['page'])) $page= 'accueil'; else $page= $_GET['page']; switch($page)
{

(...)

case 'user_sign_in': include ('user_sign_in.php');break;
case 'user_log_in': include ('user_log_in.php');break;
case 'user_log_out': include ('user_log_out.php');break;

(...)

}
?>

</div>

<!-- Division BAS : Bandeau Bas -->
<div class="bas">

(...)

=> Quelle erreur ai-je fait ? La solution est certainement simplissime, devant mes yeux mais je ne la vois pas ...

Merci d'avance pour votre aide à tous :o)

Bonne soirée,

Eric.
Bonjour,
Cette question est hors sujet par rapport à ce qui est demandé dans le sujet d'annonce du salon.

Voilà. Ceci étant dit, pour ta question, vérifie qu'aucun contenu ne soit envoyé avant le session_start. Je veux dire par "contenu" tout ce qui est echo, print & co, mais également setcookie, header. Ensuite, vérifie surtout s'il n'y a pas de ligne blanche ou d'espace avant le premier <?php du fichier. En effet, tout ce qui précède <?php est envoyé au navigateur en tant que texte statique et constitue donc un quasi-équivalent à echo.
Enfin, si tu utilises l'encodage utf8, vérifie que ton éditeur n'ajoute pas de prologue utf8 à ton fichier. Ce prologue est constitué de quelques octets sous forme binaire se trouvant au tout début du fichier, et ceux-ci sont invisibles dans l'éditeur proprement dit. Le bloc-notes de windows ajoute par exemple ce prologue utf8.

A l'avenir, pense à poser les questions de pur php dans un forum spécialisé, par exemple http://www.phpdebutant.org/forum1.php mais il en existe d'autres, choisis à ta convenance dans le sujet d'annonce du salon langage serveur.
Bonsoir Eric,

Il semble pourtant bien que le problème vienne de cela (les erreurs le stipulent d'ailleurs). J'ai vérifié mes propos et ils semblent se révéler corrects :

a écrit :
Cette fonction (session_start()) doit toujours être appelée avant toute autre fonction utilisant les fonctions de sessions, de plus si vous mélangez HTML et PHP session_start() doit être la toute première ligne de code de votre page, aucun code ne doit se trouver avant.


L'appel de la fonction est faite en ligne 5... Tiens-moi au courant !

Romain
Modifié par yodaswii (08 May 2006 - 21:13)
(Re-)Bonsoir Eric,

A la lecture de ton code, l'appel de ta fonction session_start() doit se faire à la ligne 1 de ton fichier index.php et non pas dans un fichier php que tu charges par include (grâce à une variable GET).

Romain
Merci beaucoup Romain,

En effet, ta solution est la bonne. En plaçant le démarrage de session dès la première ligne de mon fichier index.php plus de warning.

Pour mon post je respecte la remarque de QuentinC, à l'avance je me limiterai à des questions abordant les standards ou compatibilité. A ce sujet, en utilisant CSS2 et les propriétés simple top, left, etc., dans une classe .XXX pourquoi FireFox ne respecte t-il pas ces dernières ? Correct pourtant sou IE6 ... Question posée certainement mille fois, alors milles excuses d'avance ;o)

Bonne soirée à tous,

Eric.
Heureux d'avoir pu t'aider Eric !

N'oublies pas de marquer [Résolu] dans le sujet de ton post Smiley cligne .

Romain