23. marts 2006 - 23:52Der er
30 kommentarer og 1 løsning
Bruger level login funktion med asp og access database
Hejsa og godaften Eksperter
Hvordan kan jeg modificere dette her så jeg kan få
Forbindelse til access database. Glemt password funktion. Opret ny bruger funktion. Level opdelt med 1.2.3. så jeg som admin kan have mit i fred uden andre kan se det, og så bruger login som kun se asp sider som jeg giver lov til.
Generelt sørge for at sikkerheden på login funktionen er nogenlunde god så hackere ikke kan bryde ind med lethed og sådan uden videre.
login.asp ---------------- <html> <title>logintjek</title> <head> </head> <body> <% ' Tjek om login og password er korrekte If Request.Form("login") = "asp" AND Request.Form("password") = "asp" Then
' Hvis korrekt sættes session til JA Session("login") = "JA" Session.Timeout = 30 Response.Write "<h1>Du er nu logget korrekt ind</h1>" Response.Write "<p><a href='loginok.asp'>Link til beskyttet fil</a></p>"
Else
' Hvis forkert sættes ingen session til NEJ Session("login") = "NEJ" Session.Timeout = 30 Response.Write "<h1>Du er IKKE logget korrekt ind</h1>" Response.Write "<p><a href='loginformular.asp'>Fejl du er ikke logget ind korrekt</a></p>"
End If %> </body> </html>
loginok.asp ---------------- <% ' Hvis brugeren ikke er logget rigtigt på ' sendes han/hun direkte til formularen If Session("login") <> "JA" Then Response.Redirect "loginformular.asp" End If %> <html> <title>tid og dato</title> <head> </head> <body> <h1>Dette dokument er beskyttet og kan kun ses hvis man er logget ind</h1> </body> </html>
Jeg uddybere lidt mere her. ---------------------------- Jeg skal bruge det til at administrerer en hjemmeside med admin del til mig selv hvor jeg kan styrer ting som nyheder og gæstebog og andet hvor siderne skal være sikret så andre ikke kan se dem.Den anden del jeg skal bruge det til er at virksomheder som jeg søger job hos, kan logge ind og se mit CV og dataliste og ansøgning m.v. på et andet brugerlevel i databasen. Så hvis man kan lave 3 levels ialt ville det være godt.
Jeg håber på at i kan hjælpe mig eksperter for jeg står i den lidt klemte situation at jeg skal have det op og stå snarest muligt.
Kunstig intelligens har ikke bare givet virksomheder nye muligheder.
Slettet bruger
24. marts 2006 - 00:03#1
Hejsa
For lige at øge sikkerheden lidt vil jeg anbefale dig at du sætter din session til noget unikt som for eksempel id´en i databasen ud for pågældende bruger... og så skal tjek-scriptet se sådan her ud: <% ' Hvis brugeren ikke er logget rigtigt på ' sendes han/hun direkte til formularen If (Session("login") = "" OR isnull(session("login")) OR session("login") = 0 OR session("login") = "0") Then Response.Redirect "loginformular.asp" End If %> <html> <title>tid og dato</title> <head> </head> <body> <h1>Dette dokument er beskyttet og kan kun ses hvis man er logget ind</h1> </body> </html>
- og så når man logger ud (altså klikker på logout) skal denne handling ske:
<% session("login") = 0 %>
\Dan
Synes godt om
Slettet bruger
24. marts 2006 - 00:06#2
Det med brugerlevels vil jeg anbefale dig at du laver en kolonne i tabellen i databasen som hedder e.g. "level"... og at du så på hver side laver et tjek på hvilken levels som har adgang hertil... for eksempel hvis det er en side som har level 2: <% if NOT rs("level") <= 2 then response.write "INGEN ADGANG" else %>
Jeg har oprettet en ny database med navn:logindatabase Tabel: logintabel
Id Autonummerering brugernavn Tekst password Notat level Tal ip Notat ---------------------------------
Jeg har på siden loginok.asp indsat og rettet efter dine anvisninger til: <% If (Session("login") = "" OR isnull(session("login")) OR session("login") = 0 OR session("login") = "0") Then Response.Redirect "loginformular.asp" %>
Angående det med levels må du meget gerne uddybe så jeg forstår hvordan jeg kan give adgang til 1 level 2 level 3 level på den måde så level 1 som skal være admin kan se alt og level 2 kun kan se level 2 og level 3 kun kan se level 3 hvis du forstår mig ret.
Jeg mangler også at få gang i database forbindelsen hvordan gør jeg lige det. Så jeg kan få kontakt til min nye database.
Session tjekket kan gøres kortere: if not isNumeric(Session("login")&"") then Response.Redirect "loginformular.asp" end if (kræver at Session("login") pr default er "" og ikke 0)
Dernæst ville jeg gemme level i en session også. Så kan du lave dette tjek:
Kun level 1 access: if session("level") <> 1 then response.write "INGEN ADGANG" response.end end if
Level 2 access: if session("level") > 2 then response.write "INGEN ADGANG" response.end end if
Level 3 access: Ingen tjek da ALLE aligevel har adgang :o)
fennec tak for din hjælp det skal være sådan at Level 1 er: admin og level 2: virksomheder og level 3: brugere
Okay jeg prøver lige at holde hovedet koldt i det her. Hvordan skal login.asp se ud så jeg kan få adgang til databasen og tjekke om password og brugernavn er korrekt. + sende dem tilbage til loginformular.asp siden hvis det er forkert. Eller korrekt videre til loginok.asp <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("../db/logindatabase.mdb") Conn.Open DSN
strQuery = "SELECT * FROM password WHERE brugernavn='" & brugernavn & "'" Set rs = Conn.Execute(strQuery)
strQuery = "SELECT * FROM password WHERE brugernavn='" & brugernavn & "' and password='"& passWord &"'" Set rs = Conn.Execute(strQuery) if rs.eof then 'Forkert bruger/pass response.redirect("loginside.asp") else session("login") = rs("ID") session("level") = rs("level") response.redirect("enEllerAndenSide.asp") end if
' Tjek om login og password er korrekte brugernavn = replace(request.form("brugernavn"),"'","''") password = replace(request.form("password"),"'","''")
strQuery = "SELECT * FROM logintabel WHERE brugernavn='" & brugernavn & "' and password='"& password &"'" Set rs = Conn.Execute(strQuery) if rs.eof then
' Brugernavn og Password forkert response.redirect("loginformular.asp") else ' Brugernavn og Password korrekt session("login") = rs("ID") session("level") = rs("level") Session.Timeout = 30 response.redirect("loginok.asp") end if
%>
Hvis det er ok hvad for nogle ændringer skal jeg så lave med: loginformular.asp og loginok.asp for at få det til at virke.
For på siden loginok.asp skal jeg vel have det der level tjek ind om man er admin eller anden. og samtidigt sikre sig at andre ikke kan komme ind på lige netop den side.
på loginformular.asp ved jeg ikke lige hvilke ændringer der skal til for at få det til at virke. Jeg tænker også på at medtage folk ip når de prøver at logge ind så man kan se hvem det er hvis der skulle blive et problem med hackere som prøver at bryde ind.
På alle sider som skal beskyttes af login (f.eks loginok.asp) skal du have dette ind i toppen: if not isNumeric(Session("login")&"") then Response.Redirect "loginformular.asp" end if
På alle sider, som kun en bestemt level må se, skal du have dette ind lige efter den førbeskrevet if sætning: if not isNumeric(Session("login")&"") then Response.Redirect "loginformular.asp" end if 'Kun level 1 access: if session("level") <> 1 then response.write "INGEN ADGANG" response.end end if
eller: if not isNumeric(Session("login")&"") then Response.Redirect "loginformular.asp" end if 'Level 2 access (level 1 kan stadig se denne, men ikke level 3): if session("level") > 2 then response.write "INGEN ADGANG" response.end end if
hov nu fik jeg vist gang i login delen jeg indsatte: <input type="text" name="brugernavn" value="<%=brugernavn%>"> <input type="text" name="password" value="<%=password%>"> og If Request("mode") = "Check" then på login.asp siden.
jeg kan logge på og har testet:
<% 'Kun level 1 adgang: if session("level") <> 1 then Response.Redirect "ingenadgang.asp" response.end end if %>
og
<% 'Kun level 1 og 2 adgang: if session("level") > 2 then Response.Redirect "ingenadgang.asp" response.end end if %>
Men hvad nu hvis jeg vil have det sådan at alle skal kunne se det hvordan skal koden så lige se ud. Det vil sige level 1-2-3.
og det andet senarie hvor kun level 1 og level 3 må se det og ikke level 2.
body = "Du har bedt om at få tilsendt dit password til hjemmeside login system." & vbCrLf body = body & "Dit brugernavn er: " & rs("brugernavn") & vbCrLf body = body & "Dit password er: " & rs("password")
JMail.Close Set JMail = Nothing
Response.Write "En mail med dit password er send til dig!" & vbCrLf Response.Write "Med venlig hilsen!" & vbCrLf Response.Write "hjemmeside / Robot" & vbCrLf Else Response.Write "Der opstod en fejl. Mailen er ikke sendt - prøv igen!"
Nu har det jo været weekend, hvorfor vi ikke nødvendigvis er på E :o)
Du mangler faktist kabe at sende mailen og smide noget i bodyen:
body = "Du har bedt om at få tilsendt dit password til hjemmeside login system." & vbCrLf body = body & "Dit brugernavn er: " & rs("brugernavn") & vbCrLf body = body & "Dit password er: " & rs("password") JMail.Body = body if not JMail.Send() then response.write "mailen blev ikke sendt" else Response.Write "En mail med dit password er send til dig!" & vbCrLf Response.Write "Med venlig hilsen!" & vbCrLf Response.Write "hjemmeside / Robot" & vbCrLf end if
Du kan så læse om der ligger noget i cookien, også har du "husk login". Autologin kan også smides ind i cookien, og hvis den er true, køre du dit loginscript.
Du skal kun skrive i cookien hvis en af checkboxene er afkrydset, også skal du nok også skrive den fulde request:
... session("level") = rs("level") Session.Timeout = 60 if request.form("huskmig") <> "" or request.form("Autologmig") <> "" then Response.Cookies("CookieNavn")("navn") = Request.form("Username") Response.Cookies("CookieNavn")("pass") = Request.form("PassWord") if request.form("Autologmig") <> "" then Response.Cookies("CookieNavn")("autoLogin") = "1" else Response.Cookies("CookieNavn")("autoLogin") = "0" end if Response.Cookies("CookieNavn").Expires = Date+365 end if
hmm har lige prøvet synes bare ikke lige jeg kan få det til at virker. Der er et eller andet galt i det her: ---------------------------------------- if rs.eof then
' Brugernavn og Password forkert response.redirect "adgangloginformularen.asp?error1=Forkert password eller brugernavn" else ' Brugernavn og Password korrekt session("login") = rs("ID") session("level") = rs("level") Session.Timeout = 60
if request.form("huskmig") <> "" or request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("brugernavn") = Request.form("brugernavn") Response.Cookies("Cookielogin")("password") = Request.form("password") if request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("autoLogin") = "1" else Response.Cookies("Cookielogin")("autoLogin") = "0" end if Response.Cookies("Cookielogin").Expires = Date+365 end if
response.redirect("bla bla side.asp")
RS.Close Conn.Close End if End if %>
Jeg logger fint nok ind men den husker bare ikke mig i Husk login eller Autologin. Har prøvet at lukke EI Browseren ned og starte den igen og logge på og jeg har forsøgt at logge ind og ud igen og bare søge rundt på google efter nået tilfældigt og så gå tilbage til login formularen. For mig ser det kun ud til at den vil tage session lige nu.
At det ligger i en cookie er ikke ensbetydende med at du automatisk logger ind. Det skal du kode dig til. F.eks at udfylde formfelterne med værdierne fra cookien: User: <input type="Text" name="brugernavn" value="<%= Request.Cookies("CookieNavn")("navn") %>"><br> Pass: <input type="Password" name="password" value="<%= Request.Cookies("CookieNavn")("pass") %>">
Skal jeg indsætte de 2 linier som erstatning for?: <input type="checkbox" value="afkrydning" name="huskmig"> Husk login<br> <input type="checkbox" value="afkrydning" name="Autologmig"> Autologin</p> For dem der tjekker password og brugernavn i forvejen skal jeg vel ikke ændre på.
ja super nu viser den teksten i brugernavn og password hvis jeg nu har lukket browseren ned og genstartet og gået ind på login formularen siden.
Men kan man ikke også sikre sig sådan at hvis man har valgt: Husk login og Autologin at der også kommer hak / kryds i felterne i det man har valgt. Sådan at man ikke skal til at udfylde dem igen. Og en anden ting når man har valgt Auto login så skal man ikke se login formularen indenfor de der 60 minutter som session kører lige nu. Hvor man automatisk bliver sendt videre til start siden i loginsystemmet.
1. Gem afkrydsningerne i cookien (havde allerede den ene): if request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("autoLogin") = "1" else Response.Cookies("Cookielogin")("autoLogin") = "0" end if if request.form("huskmig") <> "" then Response.Cookies("Cookielogin")("huskmig") = "1" else Response.Cookies("Cookielogin")("huskmig") = "0" end if
Så kan du aftjekke checkboksene: <p><input type="checkbox" value="afkrydning" name="huskmig" <% if Request.Cookies("CookieNavn")("huskmig") = "1" then response.write "checked" %>> Husk login<br> <input type="checkbox" value="afkrydning" name="Autologmig" <% if Request.Cookies("CookieNavn")("autoLogin") = "1" then response.write "checked" %>> Autologin</p>
puha er nået forvirret lige nu. Jeg skal altså have dette det sådan her i min formular:
<% if Request.Cookies("CookieLogin")("autoLogin") = "1" then response.write "onLoad=""document.mode.submit();"" %>> <input type="checkbox" value="afkrydning" name="huskmig" <% if Request.Cookies("CookieCookielogin")("huskmig") = "1" then response.write "checked" %>> Husk login<br> <input type="checkbox" value="afkrydning" name="Autologmig" <% if Request.Cookies("CookieCookielogin")("autoLogin") = "1" then response.write "checked" %>> Autologin</p>
min formular start ser sådan ud: -------------------------------------- <form method="POST" action="bla bla minside.asp" style="word-spacing: 0; margin: 0"> <input type="hidden" name="mode" VALUE="Check">
på min asp tjek side står det lige nu sådan her: --------------------------------------------------- if rs.eof then
' Brugernavn og Password forkert response.redirect "adgangloginformularen.asp?error1=Forkert password eller brugernavn" else ' Brugernavn og Password korrekt session("login") = rs("ID") session("level") = rs("level") Session.Timeout = 60
if request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("autoLogin") = "1" else Response.Cookies("Cookielogin")("autoLogin") = "0" end if if request.form("huskmig") <> "" then Response.Cookies("Cookielogin")("huskmig") = "1" else Response.Cookies("Cookielogin")("huskmig") = "0" end if
if request.form("huskmig") <> "" or request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("brugernavn") = Request.form("brugernavn") Response.Cookies("Cookielogin")("password") = Request.form("password") if request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("autoLogin") = "1" else Response.Cookies("Cookielogin")("autoLogin") = "0" end if Response.Cookies("Cookielogin").Expires = Date+365 end if
Siden som tjekker login og sender en videre: ---------------------- <html> <title></title> <head> </head> <body> <% If Request("mode") = "Check" then
' Tjek om login og password er korrekte brugernavn = replace(request.form("brugernavn"),"'","''") password = replace(request.form("password"),"'","''")
strQuery = "SELECT * FROM logintabel WHERE brugernavn='" & brugernavn & "' and password='"& password &"'" Set rs = Conn.Execute(strQuery)
if rs.eof then
' Brugernavn og Password forkert response.redirect "formularen.asp?error1=Forkert password eller brugernavn" else ' Brugernavn og Password korrekt session("brugernavn")=rs("id") session("login") = rs("id") session("level") = rs("level") Session.Timeout = 60
if request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("autoLogin") = "1" else Response.Cookies("Cookielogin")("autoLogin") = "0" end if if request.form("huskmig") <> "" then Response.Cookies("Cookielogin")("huskmig") = "1" else Response.Cookies("Cookielogin")("huskmig") = "0" end if
if request.form("huskmig") <> "" or request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("brugernavn") = Request.form("brugernavn") Response.Cookies("Cookielogin")("password") = Request.form("password") if request.form("Autologmig") <> "" then Response.Cookies("Cookielogin")("autoLogin") = "1" else Response.Cookies("Cookielogin")("autoLogin") = "0" end if Response.Cookies("Cookielogin").Expires = Date+365 end if
response.redirect("duerloggetind.asp")
RS.Close Conn.Close End if End if %> </body> </html>
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.