Kom ihåg mig?
Home Menu

Menu


C och CGI

Ämnesverktyg Visningsalternativ
Oläst 2008-06-17, 21:17 #1
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Jag håller på att skriva om en av mina sidor från php till C, men jag har stött på problem med kakor.

Om jag gör som man ska och skriver
Kod:
	printf("Content-type: text/html\n\n");
	printf("set-cookie: kaka=test; path=/\n\n");
så skriver den ut "set-cookie: kaka=test; path=/" överst på sidan och sätter ingen kaka.
Om jag skriver
Kod:
	printf("set-cookie: kaka=test; path=/\n\n");
	printf("Content-type: text/html\n\n");
så sätts kakan, men den skriver ut html-koden istället för att visa sidan.

Någon som har något trevligt förslag till lösning? Kan det vara min apache som är felkonfigurerad och isåfall hur?
Drew är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-17, 21:37 #2
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Kan hända att jag är på fel spår här men konventionen efter headers är väl \r\n och inte \n\n?

Edit: Vore ju logiskt, två radbrytningar i http betyder ju "slut på headern, innehållet börjar".
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-17, 21:51 #3
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
\n\n ger två radbrytningar. \r\n ger bara en, det skulle isåfall vara \r\n\r\n.
\n = newline
\r = carriage return

Men tack ändå
Citat:
två radbrytningar i http betyder ju "slut på headern, innehållet börjar".
Givetvis är det så.
Kod:
printf("Content-type: text/html\n");
printf("set-cookie: kaka=test; path=/\n\n");
ska de ju vara.
Drew är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-17, 22:01 #4
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Drew@Jun 17 2008, 21:51
\n\n ger två radbrytningar. \r\n ger bara en, det skulle isåfall vara \r\n\r\n.
\n = newline
\r = carriage return
\n = unix-radbrytning
\r = mac-radbrytning
\r\n = windowsradbrytning

Därutöver finns unicode-radbrytning (0x0085) och unicode-styckesbrytning (0x2029) och ett par till om vi ska vara riktigt petiga.

Av någon anledning (kanske för att det alltid ska fungera såväl unix/mac/windows) så blev \r\n standard för mime.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-18, 00:15 #5
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Standarden säger CRLF (alltså \r\n) vad jag vet.

T.ex. när du hämtar en sida.
Kod:
GET / HTTP/1.0\r\n
Host: www.domain.tld\r\n
Connection: close\r\n
\r\n
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-18, 01:14 #6
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Jake.Nu@Jun 18 2008, 00:15
Standarden säger CRLF (alltså \r\n) vad jag vet.
Ja, det var det jag tänkte, så är det ju i alla fall uttryckt i klartext i någon rfc för mime-standarden men för http är jag inte säker om det måste vara \r\n eller om \n räcker. Telnettar man på unix så vet man ju inte vad man skickar… (Och sen vet man ju inte om det man kör med bara råkar fungera med en viss server eller alltid fungerar, alltså är väl \r\n säkrast?)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-18, 16:10 #7
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Ibland fungerar (tyvärr) \n också eftersom tillverkarna bygger in "skydd" mot dåligt programmerade server/klient applikationer.

Detsamma gäller för epostmeddelanden där alla headers (i själva meddelandet) också skall avslutas med CRLF.
SMTP fungerar likadant, CRLF avslutar en rad (som för övrigt bara får vara max 1023 tecken har jag för mig).

Kör som standarden säger: CRLF.

Senast redigerad av Jake.Nu den 2010-10-05 klockan 01:04
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 04:29.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017