Avatar billede sneumann Novice
14. februar 2004 - 12:21 Der er 28 kommentarer og
1 løsning

Problemer med login form

Jeg har problemer med at få login scriptet til at virke som jeg vil ha' det...
Efter en bruger har logget ind, skulle han gerne komme til en ny side (vagtplan.asp)... Kan ikke finde ud af hvor i scriptet det skal sættes ind:

<html>
<head>
<title>Sneumann - Login/Logout Script</title>
</head>

<body bgcolor="#ffffff" text="#000000">

<font face="verdana" size="2">

<%
If LoginMessage <> "" Then
    Response.Write(LoginMessage&"<br>")
End If
%>   

<%If Session("LoginOK") = "" Then%>
<form name="LoginForm" action="Login.asp?login=in" method="post">
<b>Indtast brugernavn : </b><br>
<input type="text" name="feltBrugernavn" size="30">
<br><br>

<b>Indtast adgangskode : </b><br>
<input type="text" name="feltAdgangskode" size="30">
<br><br>

<input type="submit" name="login" value="Login">
</form>
<%Else%>
<p><b>Velkommen</b></p>

Her har du mulighed for at logge ud.
<form name="LoginForm" action="Login.asp?login=out" method="post">
<input type="submit" name="logout" value="Logout">
</form>


<%End If%>



</font>

</body>
</html>
Avatar billede Slettet bruger
14. februar 2004 - 12:24 #1
du kan indsætte en

response.redirect "vagtplan.asp" ligeefter du har oprettet din session ?
Avatar billede sneumann Novice
14. februar 2004 - 12:26 #2
Kan du ikke vise præcist hvor i koden den skal stå ?  ;)
Avatar billede Slettet bruger
14. februar 2004 - 12:31 #3
Så vidt jeg kan se har du ikke noget sted i koden hvor du reelt opretter en session ud fra hvilken bruger der logger ind.

Vil du holde det op mod database?
Avatar billede sneumann Novice
14. februar 2004 - 12:35 #4
jeg har en access-database på serveren i log bib. og databasen hedder "database"
Avatar billede hansdam Nybegynder
14. februar 2004 - 13:24 #5
Her er et forslag til hvordan dit login script kunne se ud...:
'---------------------Kode------------------------
<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" AND Request.form("login") <> "" then

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("log/database.mdb")
Conn.Open DSN

Dim strBrugernavn, strAdgangskode
strBrugernavn = Trim(Replace(request.form("feltBrugernavn"),"'","&#39;" ))
strAdgangskode = Trim(Replace(request.form("feltAdgangskode"),"'","''" ))

SQL = "SELECT * FROM [TabelNavn] where Brugernavn = '" & strBrugernavn & "' AND Adgangskode = '" & strAdgangskode & "'"
Set rs = Conn.Execute(SQL)

if rs.eof then

    response.redirect "Login.asp?LoginMessage=Brugernavn eller adgangskode var forkert"

elseif Not (rs.BOF Or rs.EOF) Then

    Session("LoginOK") = "True"
    Session.Timeout = 1200
   
    response.redirect "vagtplan.asp"

end if

conn.close
set conn = nothing
end if

if Request("login") = "out" then

Session.Abandon
response.redirect "Login.asp?LoginMessage=Du er nu logget ud!"

end if
%>
<html>
<head>
<title>Sneumann - Login/Logout Script</title>
</head>

<body bgcolor="#ffffff" text="#000000">

<font face="verdana" size="2">

<%
LoginMessage = Request("LoginMessage")

if LoginMessage <> "" Then
    Response.Write(LoginMessage&"<br>")
end if
%>   

<%
if Session("LoginOK") = "" Then
%>
<form name="LoginForm" action="Login.asp?login=in" method="post">
<b>Indtast brugernavn : </b><br>
<input type="text" name="feltBrugernavn" size="30">
<br><br>

<b>Indtast adgangskode : </b><br>
<input type="password" name="feltAdgangskode" size="30">
<br><br>

<input type="submit" name="login" value="Login">
</form>
<%
else
%>
<p><b>Velkommen</b></p>

Her har du mulighed for at logge ud.
<input type="button" onclick="location.href='Login.asp?login=out'" name="logout" value="Logout">


<%
end if
%>

</font>

</body>
</html>
'---------------------Kode slut-------------------
Avatar billede sneumann Novice
14. februar 2004 - 17:22 #6
Det virker ikke endnu jeg havde håbet på noget mere simpel kode.
Avatar billede hansdam Nybegynder
14. februar 2004 - 18:09 #7
Hvordan vil du have den mere simpel? Hvis du hentyder til din simple kode, så er der så simpel at den ikke kan det den skal... Du vil vel også have lidt sikkerhed i dit brugersystem, ikke?
Skal jeg forklare hvad der sker i koden undervejs?
Og med hensyn til hvordan den virker, har du så husket at ændre sql-sætningen så den passer til din database?:
...
SQL = "SELECT * FROM [TabelNavn] where (Brugernavnsfelt_i_databasen = '" & strBrugernavn & "') AND (Adgangskodefelt_i_databasen = '" & strAdgangskode & "');"
...
/Hans
Avatar billede sneumann Novice
14. februar 2004 - 18:51 #8
Jeg troede bare, at man kunne lave et mere simpel kode, men det kan jeg så forstå at man ikke kan, for du har ret i at jeg gerne vil ha´ lidt sikkerhed i mit brugersystem.
Du må MEGET gerne forklare mig, hvad der sker i koden undervejs, da jeg IKKE er stærk i ASP og SQL koder.
Avatar billede hansdam Nybegynder
14. februar 2004 - 18:54 #9
Okay, så begynder jeg ligestraks at kommentere min kode, men kan du ikke lige skrive hvordan din database er opbygget (tabeller - kolonner) -> Så kan det være jeg kan nå at få det med, så du lige kan sætte den nye kode direkte ind :-D
Avatar billede sneumann Novice
14. februar 2004 - 18:59 #10
Da jeg ikke har lavet Access databasen selv, ved jeg ikke hvordan den er opbygget, men kan jeg maile filen til dig?
Avatar billede hansdam Nybegynder
14. februar 2004 - 19:02 #11
Det er i orden :-D
hans.dam@mail.dk
Avatar billede hansdam Nybegynder
14. februar 2004 - 19:53 #12
Sådan, så er der sat kommentarer på din kode :-D. Den er godt nok blevet en del længere, men nu kan du læse dig frem til hvad de forskellige ting betyder...
Du kan jo altid bare slette de kommentarer...
---------------------------Kode start---------------------------
<%
'Her siger jeg: Hvis der er noget data i en post-form og login-formen ikke er tom, så skal den begynde at indlæse dette.
if Request.ServerVariables("REQUEST_METHOD") = "POST" AND Request.form("login") <> "" then

'Her åbner jeg database forbindelsen (husk at erstatte ******** med din adgangskode til databasen, under PWD=)
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("log/database.mdb") & "; PWD=********"
Conn.Open DSN

'Her trimmer og erstatter vores qourt med &#39; og '' sammentidig med at form-dataerne bliver lagt i variabler.
Dim strBrugernavn, strAdgangskode
strBrugernavn = Trim(Replace(request.form("feltBrugernavn"),"'","&#39;" ))
strAdgangskode = Trim(Replace(request.form("feltAdgangskode"),"'","''" ))

'På de følgende to linjer (under kommentaren) bliver rs defineret, og vi spørger om der er et brugernavn og en
'adgangskode passer sammen med noget af vores data i databasen.
SQL = "SELECT * FROM [Brugere] where Brugernavn = '" & strBrugernavn & "' AND Adgangskode = '" & strAdgangskode & "'"
Set rs = Conn.Execute(SQL)

'Her spørger vi; Hvis brugernavn og adgangskoden ikke findes i databasen, så...
if rs.eof then

    'Bliver brugeren sendt tilbage, med en lille besked i røven (LoginMessage)
    response.redirect "Login.asp?LoginMessage=Brugernavn eller adgangskode var forkert"

'Her siger vi så; Ellers hvis ikke databasen er tom for det brugernavn og den adgangskode, så..
elseif Not (rs.BOF Or rs.EOF) Then
   
    'Lav en session der hedder Login, og den skal være True.
    Session("LoginOK") = "True"
    'Her sætter vi en tid på til hvornår vores session skal udløbe. Her er den sat til 1200 minutter
    Session.Timeout = 1200
    'Og så skal du brugeren lige sendes til vagtplan.asp
    response.redirect "vagtplan.asp"
   
'så afslutter vi lige vores bruger pjat ;-)
end if

'Og lukker databasen...
conn.close
set conn = nothing

'Her afslutter vi lige at vi har spurgt om der er blevet sendt et login forsøg (3. linje)
end if

'Så er vi klar til at spørge om der er blevet trykket på vores >log ud< knap...
if Request("login") = "out" then

'Hvis der er blevet trykket på knappen, så bliver ens session lukket.
Session.Abandon
'Og man bliver sendt videre til login siden, med en kommentar i røven...
response.redirect "Login.asp?LoginMessage=Du er nu logget ud!"

'Så slutter vi spørgsmålet om, om der blev trykket på logud knappen.
end if
%>
<!--
Så starter vi på vores htmlkode
-->
<html>
<head>
<title>Sneumann - Login/Logout Script</title>
</head>

<body bgcolor="#ffffff" text="#000000">

<font face="verdana" size="2">

<%
'Her definere vi at LoginMessage skal hente sin tekst fra querystringen (adresselinjen)
LoginMessage = Request.querystring("LoginMessage")

'Og hvis altså loginmessage er større eller mindre end ingenting, så skal den skrive det.
if LoginMessage <> "" Then
    Response.Write(LoginMessage&"<br>")
end if
%>   

<%
'Her starter vi med at spørge om vores session loginOk er større eller mindre end True (altså ingenting), og hvis ja,
' så skal den vise det som står på de efterfølgende linjer...
if Session("LoginOK") <> "True" Then
%>
<form name="LoginForm" action="Login.asp?login=in" method="post">
<b>Indtast brugernavn : </b><br>
<input type="text" name="feltBrugernavn" size="30">
<br><br>

<b>Indtast adgangskode : </b><br>
<input type="password" name="feltAdgangskode" size="30">
<br><br>

<input type="submit" name="login" value="Login">
</form>
<%
'Hvis session loginOK er true, så skal den skrive det på de efterfølgende linjer...
else
%>
<p><b>Velkommen</b></p>

Her har du mulighed for at logge ud.
<input type="button" onclick="location.href='Login.asp?login=out'" name="logout" value="Logout">


<%
'Så slutter vi med at spørge om noget som helst :P
end if
%>

</font>

</body>
</html>
---------------------------Kode slut--------------------------
Avatar billede hansdam Nybegynder
18. februar 2004 - 12:01 #13
Sker der noget?
Avatar billede sneumann Novice
18. februar 2004 - 13:31 #14
Her desværre ikke haft tid endnu til at afprøve det, men håber at kunne gøre det snarest.

Ved du om min udbyder, hvor jeg har min hjemmeside, om de skal kunne understøtte SQL koder?, de understøtter ASP.
Avatar billede hansdam Nybegynder
18. februar 2004 - 22:34 #15
Hvis de understøtter ASP og Access, så kan du bruge dette lille script helt uden problemer.
SQL-sætningen er bare et udtryk for hvad man skal åbne i databasen, og ikke at den henter noget fra en SQL database...
Denne kode: SQL = "SELECT * FROM [Brugere] where Brugernavn = '" & strBrugernavn & "' AND Adgangskode = '" & strAdgangskode & "'"
behøver nødvendigvis ikke hedde SQL = bla bla... men den kunne fx også hedde: Niels = bla bla

Håber det virker, for det gør det ved mig ;-)
/Hans
Avatar billede sneumann Novice
19. februar 2004 - 11:55 #16
Jeg kan stadigvæk ikke få det til at virke 100%, men er dog kommet lidt videre.

Jeg har rettet i nedenstående kode, så ******** bliver erstattet med min adgangskode.

'Her åbner jeg database forbindelsen (husk at erstatte ******** med din adgangskode til databasen, under PWD=)
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("log/database.mdb") & "; PWD=********"
Conn.Open DSN

Og i nedenstående kode har jeg rettet, at i stedet for der står: "vagtplan.asp" har jeg ændret den til: "vagtplan/hjaelper.asp"

  'Lav en session der hedder Login, og den skal være True.
    Session("LoginOK") = "True"
    'Her sætter vi en tid på til hvornår vores session skal udløbe. Her er den sat til 1200 minutter
    Session.Timeout = 1200
    'Og så skal du brugeren lige sendes til vagtplan.asp
    response.redirect "vagtplan.asp"

Det regner jeg ikke med, at skulle gøre noget. For jeg har et bibliotek som hedder vagtplan, og en fil i biblioteket som hedder hjalper.asp

Men når jeg skriver i min browser www.mitdomænenavn.dk/login.asp kan jeg godt logge ind med brugernavn og password, og klikker på login, kommer den ud og siger, The page cannot be found og i adressen på browseren har den ændret til: http://www.mitdomænenavn.dk/vagtplan/login.asp og det er jo klart den ikke kan finde den side, for jeg har ikke en login.asp i mit vagtplan bibliotek.

Jeg kan bare IKKE forstå, hvorfor den går til http://www.mitdomænenavn.dk/vagtplan/login.asp og ikke går til http://www.mitdomænenavn.dk/vagtplan/hjalper.asp

Håber du kan hjælpe mig.
Avatar billede hansdam Nybegynder
19. februar 2004 - 19:07 #17
ja, hvis jeg antager rigtigt så ligger der en stump kode der ligner denne lidt:
'--------------------------------
if session("LoginOK") <> "True" then
response.redirect "login.asp"
end if
'--------------------------------
Det skal lige siges at session("LoginOK") højse sandsynligt hedder noget andet da den ikke godkender at den er True...
Desuden, hvis du finder dette kodestykke på hjaelper.asp, så skal du rette det til dette:
'--------------------------------
if session("LoginOK") <> "True" then
response.redirect "../login.asp"
end if
'--------------------------------

Håber det hjælper :)
/Hans
Avatar billede sneumann Novice
19. februar 2004 - 22:10 #18
Jeg har en linje i login.asp som hedder if Session("LoginOK") <> "True" Then er det den jeg skal ændre til:

if session("LoginOK") <> "True" then
response.redirect "../login.asp"
end if

Eller er det i hjalper.asp det skal stå?, for i hjalper.asp filen starter med:

<%
If isEmpty(Session("UserID")) Then
    Response.Redirect("login.asp")
End If
%>

inden html koden kommer, men er det ok?
Avatar billede hansdam Nybegynder
20. februar 2004 - 10:57 #19
Nej du skal ikke ændre noget i login.asp, kun hjalper.asp.

Så det du gør er at ændre dette: (i hjalper.asp)
'-------------------------------------------------------
<%
If isEmpty(Session("UserID")) Then
    Response.Redirect("login.asp")
End If
%>
'-------------------------------------------------------
til dette:
'-------------------------------------------------------
<%
if session("LoginOK") <> "True" then
response.redirect "../login.asp"
end if
%>
'-------------------------------------------------------
Så skulle det virke. Jeg understreger lige en sidste gang at du ikke skal ændre noget i login.asp, men KUN i hjaelper.asp :)
/Hans
Avatar billede hansdam Nybegynder
22. februar 2004 - 12:26 #20
Virkede det?
Avatar billede sneumann Novice
22. februar 2004 - 16:46 #21
Ja tak nu virker det, nu mangler jeg bare hvordan man kan logge ud igen, når man er kommet ind?

Kan du hjælpe mig med det, og fortælle mig hvor koden skal være?
Avatar billede hansdam Nybegynder
22. februar 2004 - 18:15 #22
Når du skal logge ud igen skal du enten lave et link til Login.asp, hvor der er en knap som du skal trykke på for at logge ud.
Ellers kan du bare lave et link til "Login.asp?login=out", og så logger den ud med det samme...
Avatar billede sneumann Novice
22. februar 2004 - 19:10 #23
Jeg har lavet en knap i filen som hedder hjalper.asp med et link til: http://www.mitdomænenavn.dk/login.asp men der sker IKKE noget.

Det andet link du skriver om, skal det så være http://www.mitdomænenavn.dk/login.asp?login=out i hjalper.asp filen eller hvad?
Avatar billede hansdam Nybegynder
22. februar 2004 - 19:33 #24
Hvis du har et link i hjalper.asp og hjalper.asp ligger i mappen "vagtplan", kan du skrive linket sådan:
<a href="../Login.asp?login=out">Log ud</a>
eller hvis du bare skal til login.asp, skrives linket sådan:
<a href="../Login.asp">Til log status</a>
----------------------------------------------
Hvis du vil have disse link, i en knap, kan du skrive dem sådan:
<input type="button" onclick="location.href='Login.asp?login=out'" name="logout" value="Logout">
eller sådan:
<input type="button" onclick="location.href='Login.asp'" name="logout" value="Logout">
Avatar billede sneumann Novice
26. februar 2004 - 12:25 #25
Jeg har nu fået et nyt problem, som jeg håber du kan hjælpe mig med. Jeg tror ikke problemet er så stort, måske har jeg selv løsningen i nedenstående kode.

Før i tiden lå min Access database i min log mappe, som nedenstående kode viser:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("log/database.mdb")
Conn.Open DSN

Men nu skal min database være i en mappe som hedder: databbase (det er min udbyder der siger det). Men kan jeg så ikke bare rette i koden så den hedder?:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database/database.mdb")
Conn.Open DSN

Er der andre steder jeg skal rette noget?, hvis der er det, håber jeg du vil skrive hvor der skal rettes.

Håber du kan hjælpe mig.
Avatar billede hansdam Nybegynder
26. februar 2004 - 18:19 #26
Ja, som du ganske rigtigt skriver så skal koden du åbner databasen med være:
------------------------------------------------------------------
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database/database.mdb")
Conn.Open DSN
------------------------------------------------------------------
Det eneste sted du skal rette dette, er de steder hvor du har åbnet din database, ligesom den overstående kode.

Tro på dig selv og prøv dig frem :)

/Hans
Avatar billede sneumann Novice
28. februar 2004 - 16:55 #27
Tak for hjælpern med ASP, nu skulle det hele virke.
Avatar billede hansdam Nybegynder
28. februar 2004 - 17:14 #28
Det var godt det virker :-D Skulle det være en anden gang...
Avatar billede sneumann Novice
28. februar 2004 - 17:17 #29
Måske man ved jo aldrig...
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
Kategori
Kurser inden for grundlæggende programmering

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