18. maj 2005 - 01:05Der er
28 kommentarer og 2 løsninger
Header-problem
Jeg har fået lagt mit webhotel over hos concor.dk, og her støder jeg på et Header Error-problem konstant. Jeg er bange for, at jeg skal omskrive samtlige sider for at få løst problemet.
Denne fejl kan normalt løses med Response.Buffer = True i toppen af dokumentet, men ikke altid:
The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.
Her følger et eksempel fra det "gamle" webhotel, som fungerede perfekt:
<%
Dim Conn, RS
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Websider\resadmin\include.dk\include.dk\www\fpdb\include.mdb"
Set RS = Conn.Execute("SELECT * FROM profiles WHERE username='" & SQLEncode(Request.QueryString("user")) & "'")
If RS.EOF Then RS.Close Conn.Close Response.Redirect "/error.asp?msg=Brugeren+eksisterer+ikke." End If
Der forsøges redirected til en anden side, når headeren allerede er skrevet én gang i browseren?
Hvad forårsager det, og hvad skal jeg gøre for at løse det? Jeg skal lige sige, at jeg er skiftet fra MS Access til MySQL, men jeg tvivler på, at det er her problemet ligger.
Jeg skal lige huske at sige, at jeg har omskrevet conn-stringen, så der kan skabes forbindelse til MySQL-databaseserveren. Resten af VB-scriptene burde ikke være forskellig, uanset om man benytter MS Access eller MySQL?
Jeg har en protect.asp, som tjekker om sessionen er forskellig fra ingenting:
<% If Session("username") = "" Then Response.Redirect "/error.asp?msg=Log+venligst+ind+inden+du+benytter+denne+side.&redir=" & server.URLEncode(Request.ServerVariables("HTTP_URL")) End If %>
Den giver bøvl i Opera, men ikke i andre browsere. Men her er det tydeligt, at filen starter fra top, som alle de andre dokumenter:
Nu er ASP ikke lige min stærke side men går da ud fra at lige som med php er der mulighed for output buffering? noget i stil med Response.buffer=true og så Response.flush i slutningen af dokumentet.
På den måde vil du undgå fejlene med headerne, men ulempen er jo så at folk skal vente på siden er loadet helt før de får den at se.
Som sagt ASP er ikke min stærke side men mon ikke det er muligt?
Opera cacher sider og input.. dvs, hvis du har skrevet et langt indlæg, og kommer til at klikke på et link, kan du navigere tilbage, og dit indlæg vil stadig stå i tekst-feltet.. Password (det man skrive i et type="password") caches *ikke*..
<% RESPONSE.REDIRECT "" %> -- Det går ikke fordi doctype erklæringen er HTML kode..selvom den ikke står inden i dit html tag Problemet med headers er når man laver en redirect og der bare er lavet så meget som eet eneste tegn udkrevet først Dog har jeg så aldrig personligt oplevet problemet i asp før...kun i php
Det er nok fordi det er sådan en "sjov asp" ;o) Ja alt kode øverst - korrekt Doctype skal stå øverst i din udskrift til browseren Husk på klienten ser ikke din vb kode!
Når du validerer en side. Så validerer du kun "den rene html" dvs det du ser når du vælger "vis kode" Det være sig html, javascript mm. Men ikke ASP, PHP som kører på serveren Håber det kaster lidt lys over sagen?
I øvrigt så tror jeg at grunden til at det sker med Chili ASP er at det er en type asp som kører på unix/linux servere Jeg er ikke 100% men jeg kunne forestille mig det var forklaringen , for jeg har aldrig oplevet det på en windows maskine
thesurfer, jeg har prøvet det, og nogle steder virker det, men (vistnok) ikke alle. Jeg vil prøve at gå det igennem igen og evt. smide det kode, jeg evt. har problemer med.
Response.Buffer = True
bevirker, at det hele samles i bufferen, inden det sendes til klienten, gør det ikke?
Undskyld ventetiden. Jeg har ikke glemt Jer. Jeg har lige lagt en ny terasse, så jeg har haft rimelig travlt :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.