MeleaMedlem sedan juli 20033 147 inlägg Hejsan!
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"
%>
Och formulärkoden ser ut såhär:
<form action="forms/login.asp" method="post">
<table cellspacing="0" cellpadding="2" border="0">
<tr>
<td width="120"><input type="text" name="username" size="30" value="<%If Request.Cookies("superkaka") ("username") = "" then%><%Else%><%Response.Write Request.Cookies("superkaka") ("username")%><%End If%>"></td>
</tr>
<tr>
<td><input type="password" name="password" size="30"></td>
</tr>
<tr>
<td><input type="submit" value="Logga in"></td>
</tr>
</table>
</form>
Ge gärna synpunkter och förslag på koden eftersom det är mitt första riktigt avancerade loginsystem.
Tacksam för svar :)
MVH
cyprysMedlem sedan dec. 20003 563 inlägg 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
MeleaMedlem sedan juli 20033 147 inlägg 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"
%>
MVH
JosefMedlem sedan mars 20023 561 inlägg 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...
solbulleMedlem sedan mars 20015 287 inlägg Hur som helst gör du ju fel när du kör din sista SQL-fråga.
MySQL = "SELECT * FROM memb_memb"
Den plockar ju ut alla. Den ska ju bara plocka ut den nyss inloggade.
Se till att ställa villkor i den med.
MeleaMedlem sedan juli 20033 147 inlägg MM jag kom på det igår kväll men kunde inte skriva det eftersom Webforum antagligen bytte lina till ADSL (kändes så iaf ;))
Nu funkar den delen iaf.
Kan någon ge tips för att göra systemet bättre?
Sen en annan sak, finns det något enklare/bättre sätt att kolla om någon är inloggad än med Sessioner?
MVH
MeleaMedlem sedan juli 20033 147 inlägg Ingen som kan hjälpa mig med detta? :(
Ställer frågorna lite enklare:
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.
Tacksam för svar!
MVH
JosefMedlem sedan mars 20023 561 inlägg Svar på fråga 3: Du kan använda funktionen DateAdd.
Response.Cookies("superkaka").Expires = DateAdd(n, 120, now())
(Mer info om DateAdd på http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vafctdateadd.asp)
Svar på fråga 4: Dels kan du ju sätta maxlängd på input-fältet.
En sådan funktion du efterfrågar kan man ju skriva själv.
MeleaMedlem sedan juli 20033 147 inlägg Okej, tack så mkt! :)
Får dock
Feltyp:
Körningsfel i Microsoft VBScript (0x800A0005)
Ogiltigt proceduranrop eller argument.: 'DateAdd'
När jag kör koden
@ndersMedlem sedan juni 200032 969 inlägg Response.Cookies("superkaka").Expires = DateAdd([b]"n"[/b], 120, now())
mvh
MeleaMedlem sedan juli 20033 147 inlägg Man tackar =)
Någon som har ett ord o säga om Fråga 1 och 2?
JosefMedlem sedan mars 20023 561 inlägg
@nders skrev:
Response.Cookies("superkaka").Expires = DateAdd([b]"n"[/b], 120, now())
mvh
Ber så mycket om ursäkt för min glömska. :r