Rasmus Christian Kaae skrev:
> Mon ikke nærmere der er tale om et "[x] Husk min kode/password" ting (som
> kræver cookies!)
Jo, det tror jeg faktisk du har ret i. Det havde jeg ikke lige overvejet.
Jeg tror jeg ville tildele hver bruger i databasen en nøgle som f.eks. kunne
laves ved at tage MD5 af et tilfældigt tal - noget lignende:
Randomize Timer
SaveID = MD5(CStr(Rnd))
Brugernavn, Password, SaveID
Bruger1 Pwd1 E3FAD614B6048936A3003191E004F734
Bruger2 Pwd2 48936A30E3FAD614B04F7346003191E0
Bruger3 Pwd3 614B0734603F403191E048936A30EFAD
Denne SaveID er (meget sandsynligt) unik, men det er ikke muligt at regne
noget ud om brugeren fra denne nøgle og det er meget svært at gætte de andre
brugeres SaveID (ellers kunne man jo blot sætte den ind i sine Cookies og så
vil man blive logget ind som vedkommende). Læs mere om bl.a. MD5 her:
http://www.asp-faq.dk/article/?id=52
Hvis brugeren vælger at gemme sit brugernavn og password, sker der følgende
i det script der også logger brugeren ind:
' --- dologin.asp ---
' Har brugeren trykket Husk brugernavn/adgangskode:
If Request.Cookies("login") <> "" Then ' Hvis ja ...
' Log brugeren ind ved at finde indholdet af denne cookie i databasen
' Hvis nøglen ikke bliver fundet så sæt da
' Response.Cookies("login") = "" og send brugeren til login.asp
' Hvis brugeren blev logget ind korrekt:
Response.Redirect Session("LoginGotoURL")
Else ' Brugeren logger ind på normal vis ...
' Her bliver brugeren logget ind på normal vis (sendt fra login.asp)
' Brugernavn og adgangskode er nu accepteret!
' SaveID er hentet fra databasen.
If Request.Form("save") Then ' Vil brugeren huske brugernavn/adgangskode
' Her gemme vi vores hemmelige nøgle SaveID på brugerens computer:
Response.Cookies("login").Domain = "
www.domain.dk" ' Domænenavn
Response.Cookies("login").Expires = Now + 60 ' Udløber om 60 dage
Response.Cookies("login").Path = "/" ' Stien til login-scriptet
Response.Cookies("login").Secure = False ' True virker kun med SSL
Response.Cookies("login") = SaveID ' Gem SaveID
Else
Response.Cookies("login") = ""
End If
End If
' --- login.asp ---
' Hvis Husk navn/kode er slået til - så log ind automatisk:
If Request.Cookies("login") <> "" Then
Session("LoginGotoURL") = "/"
Response.Redirect "dologin.asp"
End If
' Normalt login-script følger her ...
' --- alle beskyttede sider med brugernavn/adgangskode ---
' Er brugeren logget ind?
If Session("loginok") <> True Then ' Hvis nej ...
' Check auto-login:
If Request.Cookies("login") <> "" Then
' Hvis Husk navn/kode er slået til - så log ind automatisk:
Session("LoginGotoURL") = Request.ServerVariables("SCRIPT_NAME")
Response.Redirect "dologin.asp"
Else
' ... ellers send brugeren til login-siden:
Response.Redirect "login.asp"
End If
End If
' Resten af siden følger her ...
Håber jeg fik det penslet ud så du forstår det
(håber ikke det blev alt
for langt - jeg burde jo nærmest skrive en artikel ...). Jeg ved ikke om der
er en nemmere måde, men jeg tror det ikke, hvis det skal være sikkert.
Ovenstående kode skal i øvrigt tilrettes lidt mere før der er fuld sikkerhed
på. Hvis det tilmed skal laves mere sufistikeret kunne man evt. løbende
ændre SaveID. Det vil nok øge sikkerheden en lille smule.
Mvh. Bjarke