session_start(); ce place avant tout code php ou html.
Ou pas...
session_start() ne se place pas "avant tout code php" de manière bêta et systématique. Il se place avant tout envoi de
contenu au client. (C'est à dire un echo/print/print_r ou du contenu hors des balises <?php ?>).
Et c'est valable aussi pour header(), setcookie().
Ce genre de raccourci met la confusion dans l'esprit des gens, ce topic en est la preuve...
micka13, pour ton problème. Le fonctionnement même de ton site n'est pas top je trouve. En effet si j'ai bien compris, login.php te sert tantôt inclue dans une page, tantôt appelée directement...
Et cela explique tous tes soucis :
Quand tu l'inclus dans xhtml.php, login.php ne peut plus ouvrir de session car lorsque login.php est appelé, du code xhtml a déjà été envoyé au client par xhtml.php. Pour résoudre cela tu as d'abord déplacé le session_start dans xhtml.php. Mais comme d'après ce que tu dis, le formulaire dirige sur login.php directement, celle-ci est parfois appelée directement par le client. Il faut donc que login.php possède aussi un session_start() pour quand elle est toute seule ! Qu'à cela ne tienne, tu as donc mis un session_start() sur les 2... Mais si on revient dans la première situation, avec l'inclusion, on se retrouve avec un 2ème session_start() au milieu.
Donc pour moi, la meilleure solution serait de revoir tout ton système, en t'arangeant pour que soit login.php soit une page toujours appelée directement ou toujours incluse.
Sinon, une autre méthode qui resterait "propre" (plus que l'ajout du @ du moins

) : tu met ton session_start() dans une page session.php et tu mets :
include_once 'session.php';
au début de tes 2 pages.
Salut.