Ja, jeg kan da prøve at uddybe, men så bliver jeg altså også nød til at forklare lidt (meget) om http protokollen:
Lad os antage at klienten (som vi kalder brugeren) allerede har fundet serveren, ellers bliver det lidt for besværligt.
Først sender klienten en forespørgsel til serveren, og hvilken side den gerne vil have, "Hej. Jeg vil gerne have
http://eksempel.dk"Derefter forhandler de indbyrdes om, hvilken kryptering, hvilket sprog og tegnsæt der skal bruges. Det springer vi også let og elegant over.
Så fortæller serveren klienten hvilken side den vil sende, hvilke cookies der følger med og hvilken slags fil siden er. "Her kommer
http://eksempel.dk med cookien 'PHPSESID' som er lig 'abc123'. Siden er HTML."
Klienten sender svar tilbage, at den har modtaget sidehovedet (
headers), og at sideoverførslen kan begynde.
Siden bliver overført, klienten viser siden, de siger "Tak og farvel" og afbryder så forbindelse.
Når serveren skal sende en side afsted, starter den med at finde ud af, om siden bare skal sendes, eller om den skal "preprocesses". PHP, akronym for PHP Hypertext Preprocessor, er en såden preprocessor. Oftest er webserveren indstillet til kun at sende sider videre til PHP hvis de slutter på en bestemt endelse, f.eks. ".php", eller ".phtml".
Når PHP tager over starter den med at læse siden fra toppen. Hvis der i filen kaldes en funktion som vil tilføje noget til sidehovedet (en
header), fortæller PHP det til webserveren.
Hvis PHP til gengæld finder noget der vil sende indhold, (tilføje noget til
body'en fortæller PHP webserveren, at nu begynder indholdet. De fleste webservere er så konfigureret til straks at sende sidehovedet afsted, for hurtigt at kunne få svar fra klienten. PHP sender også indhold afsted selvom det ikke kommer fra en funktion, altså bliver
abc<?php echo "123";?> til
abc123 og ikke bare
123.
Hvis der ved en fejl er kommet et mellemrum ind før starten på php koden vil dette blive sendt til webserveren, og det vil altså ikke være muligt for PHP at tilføje mere til sidehovedet, da dette allerede er sendt afsted.
PHP sessioner bruger cookies til at holde styr på de forskellige brugere, og da cookies sendes med sidehovedet er det altså ikke muligt at oprette en session efter at der er afsendt indhold. Derfor den fejl du oplever.
Jeg håber ikke det blev for kludret, så det ikke var til at forstå.