14. februar 2004 - 12:21Der 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:
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>
Her er et forslag til hvordan dit login script kunne se ud...: '---------------------Kode------------------------ <% if Request.ServerVariables("REQUEST_METHOD") = "POST" AND Request.form("login") <> "" then
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
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.
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
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 ' og '' sammentidig med at form-dataerne bliver lagt i variabler. Dim strBrugernavn, strAdgangskode strBrugernavn = Trim(Replace(request.form("feltBrugernavn"),"'","'" )) 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>
<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 %>
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
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.
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 '--------------------------------
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
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...
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">
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:
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?:
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.
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.