Håller just nu på att jobba på en ny community och det blir problem när jag ska logga in med min andra användare.
Jag har för tillfället 2 användare i databasen. Den ena heter Mellow och den andra heter Melea. När jag loggar in med Mellow som har id 1 så funkar allt perfekt. När jag sedan försöker logga in med Melea som har id 2 så står det fel användarnamn eller lösenord, det är som den inte loopar igenom alla användare i databasen.
Såhär ser koden ut:
<!-- #include file="../databas.inc" -->
<% Response.Buffer = True
MySQL = "SELECT * FROM memb_memb"
Set RecSet = Conn.Execute(MySQL)
Do Until RecSet.EOF
If RecSet("status") = "online" AND DateDiff("n", RecSet("senast_inloggad"), Now) > 40 Then
MySQL = "UPDATE memb_memb SET status = 'offline' "
Connect.Execute(MySQL)
End If
RecSet.MoveNext
Loop
Do Until RecSet.EOF
[b]'Det är som den här koden inte funkar eftersom den uppdaterar senast_inloggad, antal_inlogg etc. till rätt användare.
If lcase(RecSet("username")) = lcase(Request.Form("username")) AND lcase(RecSet("password")) = lcase(Request.Form("password")) Then[/b]
MySQL = "UPDATE memb_memb SET antal_inlogg = antal_inlogg + 1, senast_inloggad = '" & Now & "', status = 'online', IP = '" & Request.ServerVariables("REMOTE_ADDR") & "'"
Set RecSet = Conn.Execute(MySQL)
MySQL = "SELECT * FROM memb_memb"
Set RecSet = Conn.Execute(MySQL)
Session("access_memb") = RecSet("access_memb")
Session("access_admin") = RecSet("access_admin")
Session("username") = RecSet("username")
Session("online") = "1"
Session("id") = RecSet("id")
Session("status") = "online"
Session.Timeout = 15
Response.Cookies("superkaka")("status") = RecSet("status")
Response.Cookies("superkaka")("senast_inloggad") = RecSet("senast_inloggad")
Response.Cookies("superkaka")("username") = RecSet("username")
Response.Cookies("superkaka").Expires = "December 31, 2005"
Response.Redirect "../default.asp"
End If
RecSet.MoveNext
Loop
Session("fel") = "Tyvärr! Fel användarnamn eller lösenord. Försök igen!"
Response.Redirect "../default.asp"
%>
Det är inget bra sätt att gå tillväga det sättet du valt.
Det finns många trådar här på webforum med exempel på hur du skall göra.
En start är att du t.ex. inkluderar inloggningsuppgifterna redan i sql-satsen.
ex.
StrSQL1 = "SELECT id FROM memb_memb WHERE [username] = '" & request.form("username") & "' AND [password] = '" & request.form("password") & "'"
Set RecSet1 = Conn.execute(StrSQL1)
if Not RecSet1.Eof Then
' Användaren finns!!!
else
' Användaren finns inte :(
end if
Jag har sökt runt i forumet men jag hittar inte hur jag ska göra ett enklare login system än det jag har nu.
Ändrade lite men nu, när jag ska logga in så loggas jag in som Mellow även om jag skriver Melea i username formuläret.
Ingen som kan visa lite kod från deras login system så man kan få lite tips och ideér?
Koden ser i vilket fall ut såhär nu:
<!-- #include file="../databas.inc" -->
<% Response.Buffer = True
'Rensar ut folk som inte loggat ut ordentligt
MySQL = "SELECT * FROM memb_memb"
Set RecSet = Conn.Execute(MySQL)
Do Until RecSet.EOF
If RecSet("status") = "online" AND DateDiff("n", RecSet("senast_inloggad"), Now) > 40 Then
MySQL = "UPDATE memb_memb SET status = 'offline' "
Connect.Execute(MySQL)
End If
RecSet.MoveNext
Loop
'Utrensat =)
MySQL = "SELECT id FROM memb_memb WHERE username = '" & lcase(Request.Form("username")) & "' AND password = '" & lcase(Request.Form("password")) & "'"
Set RecSet = Conn.Execute(MySQL)
If NOT RecSet.EOF Then
MySQL = "UPDATE memb_memb SET antal_inlogg = antal_inlogg + 1, senast_inloggad = '" & Now & "', status = 'online', IP = '" & Request.ServerVariables("REMOTE_ADDR") & "'"
Set RecSet = Conn.Execute(MySQL)
MySQL = "SELECT * FROM memb_memb"
Set RecSet = Conn.Execute(MySQL)
Session("access_memb") = RecSet("access_memb")
Session("access_admin") = RecSet("access_admin")
Session("username") = RecSet("username")
Session("online") = "1"
Session("id") = RecSet("id")
Session("status") = "online"
Session.Timeout = 15
Response.Cookies("superkaka")("status") = RecSet("status")
Response.Cookies("superkaka")("senast_inloggad") = RecSet("senast_inloggad")
Response.Cookies("superkaka")("username") = RecSet("username")
Response.Cookies("superkaka").Expires = "December 31, 2005"
Response.Redirect "../default.asp"
End If
Session("fel") = "Tyvärr! Fel användarnamn eller lösenord. Försök igen!"
Response.Redirect "../default.asp"
%>
Lite OT: Det är inte speciellt bra att ha hemlig databas-info, som har antar att du har i databas.inc, i en fil som inte exekveras. Detta gör ju inte inc-filer. Lägg det hellre i en asp-fil (som exekveras), eller utan för web-roten, vilket du kanske redan har gjort...
1. Jag undrar om någon kan dela med sig av deras login script så jag (och säkert många andra) kan ta glädje av det, alltså ta tips och ideér från det. Inget måste men vore trevligt, i annat fall kan väl någon kolla igenom min kod och säga vad som kan göras bättre?
2. Sen fråga nummer två. Jag undrar om det finns några enklare sätt att kolla saker med än Sessioner. Vill t.ex. kolla vilket Access nivå en person har på min sida. Just nu har jag så det skapas en Session med Access nivåns värde och jag kollar om personen i fråga har tillräckligt hög Access nivå för att surfa in på en viss sida. T.ex. <%If Session("access") > "2" then%>. Nu undrar jag alltså om det finns några säkrare och bättre sätt att göra detta på än så jag gör nu?
3. Undrar också om det går att fixa så det går att tidsinställa en cookie för ca. 120 minuter istället för att skriva in ett datum i Expires.
Vill alltså ändra:
Response.Cookies("superkaka").Expires = "December 31, 2005"
Till:
Response.Cookies("superkaka").Expires = "120"
Går det på något sätt och fixa?
4. Finns det något funktion som kan kolla av så man har minst 6 tecken i Användarnamnet och Lösenordet? Kan bara fixa så det blir max antal tecken.