Avatar billede ziko Nybegynder
21. december 2003 - 14:33 Der er 22 kommentarer

Hjælp til fejl i loginscript

Hej
Jeg har bøvlet en del med et login script her i dag. Nu har jeg så endelig fået forbindelse til databasen (My SQL) Men når jeg skriver et brugernavn og password som jeg har lavet i databasen, skriver den følgende fejl:

Response object error 'ASP 0156 : 80004005'

Header Error

/login/logintjek.asp, line 19

The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.

Koden til hele scriptet:

Login.asp:

<form action="logintjek.asp" method="post">
<input type="text" name="brugernavn" size="20"> <br>
<input type="password" name="kodeord" size="20">
<input type="submit" value="login">
</form>


Logintjek.asp:

<%
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "driver={MySQL};Server=localhost;uid=Brugernavn;pwd=Password;database=Databasenavn"

    strSQL = "SELECT * FROM tblBrugere WHERE brugernavn = '" & Request.Form("brugernavn") & "' AND Adgangskode = '" & Request.Form("kodeord") & "';"
    Set objRs = objConn.Execute(strSQL)

    If (objRs.BOF Or objRs.EOF) Then
        Response.Write("Dit kodeord eller brugernavn var forkert!")
    Else
        Response.Redirect("Hemmeligside.asp")
    End If
%>


Nogle som ved hvad der kan være galt ?

//Ziko
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:46 #1
Jeg tror at det er den her:
Response.Redirect("Hemmeligside.asp")

Brug Response.Buffer = True i toppen af dit dokument. Hvis du ikke allerede bruger Option Explicit som den første linie, i dine ASP dokumenter, gør det.
Derefter definere du ALLE dine variabler før du bruger dem. Så kan du hurtigt fange stavefejl o.lign.

Altså de første 3 linier i hele filen:
<%
Option Explicit
Response.Buffer = True
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:47 #2
Jeg mener at hvis du bruger Response.Buffer = False, og skriver udskriver noget, enter html eller asp, så kan du ikke bruger Response.Redirect, idet der allerede er noget tekst der er sendt til klienten (browseren).
Avatar billede ziko Nybegynder
21. december 2003 - 14:48 #3
okay.... os i hemmeligside.asp ?
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:49 #4
Brug altid Option Explicit, dog ikke i filer du inkluderer, da der allerede vil være 1 linie med Option Explicit.
Avatar billede ziko Nybegynder
21. december 2003 - 14:51 #5
Jow... Jeg har lige prøvet at sætte:
<%
Option Explicit
Response.Buffer = True
Ind i logintjek.asp så gav det følgende fejl, jeg sku ikke sætte det ind i de andre os vel ?


Microsoft VBScript compilation error '800a0400'

Expected statement

/login/logintjek.asp, line 10

Option Explicit
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:51 #6
Et godt råd:
dim strBrugernavn, strKodeord

strBrugernavn = replace(request.form("brugernavn"), "'", "")
strKodeord = replace(request.form("kodeord"), "'", "")

strSQL = "SELECT * FROM tblBrugere WHERE brugernavn = '" & strBrugernavn & "' AND Adgangskode = '" & strKodeord & "'"


Ellers kan din side "hackes" med et brugernavn som f.eks.:
' or 1 = 1 or
Eller ligende.
Avatar billede ziko Nybegynder
21. december 2003 - 14:53 #7
hvor skal jeg smide det ind henne ?
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:53 #8
Dine asp filer skal bestå af:

linie1: <%
linie2: Option Explicit
linie3: Response.Buffer = True

' resten af koden her

linieX: %>
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:54 #9
Du erstatter bare din strSQL med den jeg skrev. Og indsæt
dim strBrugernavn, strKodeord

strBrugernavn = replace(request.form("brugernavn"), "'", "")
strKodeord = replace(request.form("kodeord"), "'", "")

lige før din strSQL sætning.
Avatar billede ziko Nybegynder
21. december 2003 - 14:56 #10
Det hjælper ik... Den skriver det stadig
Avatar billede ziko Nybegynder
21. december 2003 - 14:56 #11
Har du icq, så kan det være du kunne guide mig lidt der ?
Avatar billede thesurfer Nybegynder
21. december 2003 - 14:59 #12
Jeg bruger kun ICQ når det virkeligt går galt :)

Skriv lige hele din Logintjek.asp fil.. for jeg tror at du har gjordt et eller andet forkert :)

HUSK: brugernavne/passwords og stier/adresser til databaser, og ligende vigtigt information, skal skjules først. Gerne med nogle "X"..
Avatar billede ziko Nybegynder
21. december 2003 - 15:02 #13
<html>

<head>
<title>Login tjek</title>
</head>

<body>

<%
Option Explicit
Response.Buffer = True


    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "driver={MySQL};Server=localhost;uid=XXXX;pwd=XXXX;database=XXXX"

    dim strBrugernavn, strKodeord

        strBrugernavn = replace(request.form("brugernavn"), "'", "")
        strKodeord = replace(request.form("kodeord"), "'", "")

strSQL = "SELECT * FROM tblBrugere WHERE brugernavn = '" & strBrugernavn & "' AND Adgangskode = '" & strKodeord & "'"


 
    Set objRs = objConn.Execute(strSQL)

    If (objRs.BOF Or objRs.EOF) Then
        Response.Write("Dit kodeord eller brugernavn var forkert!")
    Else
        Response.Redirect("Hemmeligside.asp")
    End If
%>

</body>

</html>
Avatar billede thesurfer Nybegynder
21. december 2003 - 15:06 #14
Citat:
"Dine asp filer skal bestå af:

linie1: <%
linie2: Option Explicit
linie3: Response.Buffer = True"

Du har noget html kode FØR Option Explicit:

<html>

<head>
<title>Login tjek</title>
</head>

<body>


Det må der ikke være. Jeg gentager:

linie1: <%
linie2: Option Explicit
linie3: Response.Buffer = True"

Af hele filen :)
Avatar billede trumf Nybegynder
21. december 2003 - 15:07 #15
Den skal se sådan ud:

<%
Response.Buffer = True
%>
<html>

<head>
<title>Login tjek</title>
</head>

<body>

<%
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "driver={MySQL};Server=localhost;uid=XXXX;pwd=XXXX;database=XXXX"

    dim strBrugernavn, strKodeord

        strBrugernavn = replace(request.form("brugernavn"), "'", "")
        strKodeord = replace(request.form("kodeord"), "'", "")

strSQL = "SELECT * FROM tblBrugere WHERE brugernavn = '" & strBrugernavn & "' AND Adgangskode = '" & strKodeord & "'"


 
    Set objRs = objConn.Execute(strSQL)

    If (objRs.BOF Or objRs.EOF) Then
        Response.Write("Dit kodeord eller brugernavn var forkert!")
    Else
        Response.Redirect("Hemmeligside.asp")
    End If
%>

</body>

</html>
Avatar billede thesurfer Nybegynder
21. december 2003 - 15:09 #16
Der er en der har forstået det :)
..Håber at ziko kan se det :)M

en tilføj Option Explicit før Respose.Buffer = True.
Avatar billede trumf Nybegynder
21. december 2003 - 15:12 #17
Hvis der skal tilføjes Option Explicit så skal objRs, strSQL og objConn også lige dimmes!
Avatar billede thesurfer Nybegynder
21. december 2003 - 15:19 #18
trumf> Korrekt. Jeg skrev jo også "Derefter definere du ALLE dine variabler før du bruger dem.".
Hvis ziko ikke ved hvordan man definerer/"dimmer":
dim variabelnavn
objRs, strSQL og objConn er variabler (variabelnavne).
Avatar billede ziko Nybegynder
21. december 2003 - 15:22 #19
Så virker det gutter... Det var sku dejligt... i får tak
Avatar billede thesurfer Nybegynder
21. december 2003 - 15:23 #20
så lægger jeg et svar.
Avatar billede trumf Nybegynder
21. december 2003 - 15:26 #21
thesurfer> Det så jeg ikke lige, jeg kommer lige fra det forrige spm, hvor vi også kom ind på denne her...
Avatar billede trumf Nybegynder
21. december 2003 - 15:32 #22
Jeg synes dog lige at ziko skal have sikkerheden med, for ellers er det jo ligemeget med det logind script.

ziko>

Tilføj session("loggedind") = true
før Response.Redirect("Hemmeligside.asp")

og så check om session("loggedind") = true på Hemmeligside.asp ellers kan man jo bare gå direkte til den side uden om logind scriptet

På Hemmeligside.asp skriver du i toppen:

<%
Option Explicit
Respose.Buffer = True

If session("loggedind") <> true Then
  response.redirect("logind.asp")
end If
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester