Problem med cookies

Tags:    php

Hej

Jeg har et problem med nogen cookies

Fold kodeboks ind/udKode 

Jeg får fejlen:
Warning: Cannot modify header information - headers already sent by (output started at D:\\Programmer\\Apache Group\\Apache2\\htdocs\\websted\\sambaboldlokal\\ha.php:5) in D:\\Programmer\\Apache Group\\Apache2\\htdocs\\websted\\sambaboldlokal\\ha.php on line 9

Håber der er nogen, der kan hjælpe



Indlæg senest redigeret d. 14.05.2006 20:05 af Bruger #9887
5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
zynzz output buffering er en lidt kedelig måde at fikse dette på synes du ikke?

@Rasmus

Dette sker fordi at du outputter noget inden du forsøger at ændre i dine headers. Hele emnet er lidt indviklet, men altså kort sagt:

Når du går ind på en internetside med din browser (typisk IE eller Firefox), så sender din browser nogle informationer til en http-server (dette ved du sikkert godt), den tricky del lyder så på at når serveren sender sit respons tilbage (HTML dokumentet), så sender den et output i stil med dette:
Fold kodeboks ind/udKode 


Altså så kommer der såkaldte headers inden selve html dokumentet, og blandt disse er bl.a. cookies. Dette betyder at du ikke må sende noget output (html om du vil) inden du forsøger at manipulere med disse headers (hvilket du f.eks. gør ved at sætte en cookie).

Det korte af det lange er, at du skal omrokere lidt på din kode:

Fold kodeboks ind/udKode 


Bemærk at selv ting som linjeskift osv. er output og må derfor ikke forekomme inden du manipulerer med headers!

Og bemærk yderligere at alle fejl hvor der står noget med "headers already sent by", er af denne type. Du kan ydermere se hvor du har sendt output henne via denne fejlmeddelelse (markeret med fed i kodeeksemplet)

Fold kodeboks ind/udKode 


Det der er markeret med kursiv viser hvor du forsøgte at manipulerer med dine headers.

Håber at dette kunne hjælpe dig.



Det er et typist buffer problem... :S

http://dk2.php.net/manual/en/function.ob-start.php



Har du et forslag til hvordan scriptet kunne se ud?;)



Indlæg senest redigeret d. 14.05.2006 20:27 af Bruger #9887
Du kan jo komme ud i situationer hvor det er meget besværligt eller direkte umuligt at sende headers før outputtet, men selvfølgelig kan dette problem også løses..

Skriv ob_start(); aller øverst i dit dokument og tilføj ob_flush(); aller nederst. Dette gør at serveren stopper kontakt med klienten indtil ob_flush(); bliver kaldt. Derfor får du frihed til at manipulere headers.



@Mads

Helt rigtigt, men dette er lidt en tøsedrengs måde at løse problemet på hvis du spørger mig, plus det koster performance.

En meget bedre måde er at være bevidst om det og kode sin side op efter dette. At lære folk fra bunden bare at bruge output buffering til at løse sådanne problemer løser jo ikke noget.

For det første lærer personen ikke noget om fejlen bare at man løser den på den måde. Det svarer til at du lærer i skolen af 10^2 er 100 uden videre forklaring.

Output buffering er fint, men det bør være sidste udvej.



t