login  Naam:   Wachtwoord: 
Registreer je!
 Forum

HTTP headers

Offline Stijn - 01/04/2005 18:05
Avatar van StijnPHP expert yow

ik ben bezig met een userdatabank aan het maken voor mijn website.

Als de gebruiker zich inlogt en het script vindt resultaten dan plaatst hij een cookie.

Maar de cookie wil niet geplaatst worden omdat de headers al verzonden zijn...

De eerste regel van de website is session_start();.

Ik heb ook al gepobeerd met header(..); maar dat lukt ook niet.
hier staat de code van wanneer hij de cookie moet plaatsten.

  1. <?php
  2. if($controle == 1)
  3. {
  4. header(setcookie("user", $controle->id, time()+60*60*24*365));
  5. }
  6. ?>


Ik ben nog niet vertrouwd met de functie header() maar ik denk dat ik die moet gebruiken.:|

Groeten stijn 

9 antwoorden

Gesponsorde links
Offline VonDutch - 01/04/2005 18:09
Avatar van VonDutch PHP interesse voor setcookie en header mag allebei nog geen content verzonden zijn, dus dat kan alleen maar voor de DOCTYPE tag (als dat je eerste output is). Dat komt doordat php de cookies set door dat met de header van de pagina mee te sturen.

Probeer dus toch om je content achter te houden voordat je setcookie of header() gebruikt misschien is een output buffer handig?
Offline Stijn - 01/04/2005 18:11 (laatste wijziging 01/04/2005 18:30)
Avatar van Stijn PHP expert output buffer???

[edit]

Hallo??
Offline xSc - 01/04/2005 18:33 (laatste wijziging 01/04/2005 18:34)
Avatar van xSc Onbekend Hmm, wat is header(setcookie()) dan?

setcookie() / header moet voor de eerste browser output staan.

Voorbeeld:

  1. <html>
  2. <?php
  3.  
  4.  
  5. ?>
  6. </html>


Bovenstaand is fout.

  1. <?php
  2.  
  3. $bla = 'test';
  4.  
  5.  
  6. ?>


is goed.



Offline Stijn - 01/04/2005 18:40
Avatar van Stijn PHP expert mm, maar hoe zou ik dan die cookie plaatsten???

misschien de cookie plaatsten zonder waarde en dan de cookie updaten???

zou dit werken.

indien ja, hoe update je die dan??

groeten stijn
Offline VonDutch - 01/04/2005 18:51
Avatar van VonDutch PHP interesse nope kan niet. Cookie wordt allemaal met de header meegestuurd, dus kan je niet later nog updaten. Cookies kan je ook met javascript doen, als je echt eerst content moet verzenden. Output buffer is dingen met ob_start() enzo. Dit houdt alleen de output achter totdat jij wilt dat hij verzonden wordt 

toelichting: www.php.net/ob_start
Offline Stijn - 01/04/2005 19:00
Avatar van Stijn PHP expert mmm, en ipv setcookie()
gewoon de header(location: users.php) en vanboven de pagina de cookie plaatsten, zo dit lukken?????

Offline VonDutch - 01/04/2005 19:51
Avatar van VonDutch PHP interesse als setcookie() niet kan, kan header() ook niet. de header Location kan je ook maar een keer doen en dat is meteen de laatste regel die hij uitvoert omdat hij dan de nieuwe pagina al gaat ophalen. Als je precies uitlegt wat er moet gebeuren/het script ff geeft (msn: jorenwillem@hotmail.com) dan kan ik het misschien wel voor je aanpassen.
Offline Thomas - 02/04/2005 13:17
Avatar van Thomas Moderator Een pagina is als volgt opgebouwd (in die volgorde !!!):

*1 headers (waarin je setcookie(), header() et cetera kunt gebruiken)
*2 de rest (hierin zit de eigenlijke pagina, dus <!DOCTYPE ...>, <html> et cetera)

Deze volgorde moet je altijd aanhouden, zoals in de voorbeeldpost van Henri hierboven, TENZIJ je ob_start() aan het begin van je pagina zet.

ob_start() zorgt ervoor dat het versturen van OUTPUT (dus alles wat met *2 te maken heeft) uitgesteld wordt totdat de hele pagina is verwerkt, hierbij worden "headers en content" in de goede volgorde gezet.

ob_start() is dus een hulpmiddel voor mensen die het verschil niet kennen (maar het kan wel eens handig zijn om te gebruiken).
Offline VonDutch - 03/04/2005 21:00 (laatste wijziging 03/04/2005 21:01)
Avatar van VonDutch PHP interesse De headers zijn gewoon info over de pagina. Een simpele pagina kan er zo uitzien inclusief headers:

  1. HTTP/1.0 200 OK
  2. Date: Sun, 03 Apr 2005 18:48:08 GMT
  3. Server: Apache
  4. Set-Cookie: Apache=212.78.206.100.189401112554088617; path=/
  5. Last-Modified: Sun, 06 Feb 2005 20:36:00 GMT
  6. Accept-Ranges: bytes
  7. Content-Length: 64
  8. Connection: close
  9. Content-Type: text/plain
  10.  
  11. <html>
  12. <head>
  13. <title>blaat</title>
  14. <body>
  15. hall0w
  16. </body>
  17. </html>


Eerst een paar headers. HTTP/1.0 200 OK is om aan te geven welke HTTP versie er gebruikt wordt.
Date is de timestamp van de request.
Server spreekt voor zich, en Set-Cookie vertelt de browser dat er een koekje gemaakt moet worden en wat erin moet staan. Dat is dus precies wat setcookie() doet, en is dus ook precies hetzelfde als header(Set-Cookie: ...).
Last-Modified geeft de laatste paginawijziging aan, en Accept-Range is volgens mij wat voor gegevens er geaccepteerd worden.
Content-Length geeft de paginalengte aan in bytes, maar 1 byte = 1 teken, dus met gewone files die leesbaar zijn in notepad is het aantal bytes gelijk aan het aantal tekens. Alleen telt een newline ook als een byte volgens mij, misschien zelfs twee omdat het een linefeed + een carriagereturn is.
Connection vertelt of de browser de verbinding met de server in stand moet houden of verbreken, en tenslotte zegt Content-Type wat voor soort inhoud de pagina heeft. Dit kan bijv. zijn text/plain, text/html, image/png, of application/pdf. De browser kan dan beslissen wat hij met het bestand doet, renderen of een downloadprompt geven.
Daarna komt er een lege regel om aan te geven dat er geen headers meer komen, en dat de content erna volgt. De volgorde van de headers maakt niks uit, behalve dan die lege regel, en HTTP/1.0 200 OK moet wel aan het begin staan.

zowzow das een heel verhaal geworden 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.206s