webForumDet fria alternativet

Optimera inloggnings kod.

ASP

21 svar · 542 visningar · startad av pRob3

Medlem sedan maj 2003151 inlägg
Frågan#1

Någon som har lust o kolla igenom min inloggnings kod o optimera den på det allra bästa sättet? Använder en MySQL databas.

<%@ LANGUAGE="VBSCRIPT" %>
<% Response.Expires=-1 %>
<% Response.Buffer = True %>
<% Session.LCID = 1053 %>
<!-- #include file="adovbs.inc" -->
<!-- #INCLUDE VIRTUAL="/include/koppling.asp" -->

<%
Dim vem
vem=lcase(Request.Form("username"))

Set RecSet = Connect.Execute("SELECT * FROM members where username='"& vem &"'")

If RecSet.EOF Then
Session("meddelande") = "             Tyvärr!\n Finns ingen Slaf som heter "& vem &".\nSäkert att du stavat rätt?"
Connect.Close
Set Connect = nothing
Response.Redirect "default.asp"
Else
'-------------------------------------------

If Lcase(RecSet("losen")) = Lcase(Request.Form("losen")) Then

'##################### Kontroll om loggat in i dag

If RecSet("inlogg_datum") <> Date() Then
Connect.Execute ("update members set points = points +500, inloggad = inloggad +1 where username='" & vem & "'")
End If
'##################### Slut Koll

Connect.Execute ("update members set mood='"& Request.Form("mood") &"', datum='" & Now() & "', inloggad = inloggad +1, inlogg_datum='" & Date() & "', inlogg_tid='" & Time() & "', status='online', ip='" & Request.ServerVariables("REMOTE_ADDR") & "' where username='" & vem & "'")

if RecSet("kon")="Kille" then 
sex = "P"
else
sex = "F"
end if

newage=DateDiff ("d", RecSet("foddes"), Now)
newage=newage / 365
newage=formatnumber(newage,2)
newage=left(newage,2)
		
Session("sex") = ""& sex &""& newage &""
Session("username") = RecSet("username")
Session("stad") = RecSet("stad")
Session("login") = "ok"
Session("id") = RecSet("id")
Session("minonline") = now()
		
Session.TimeOut = 40

'----- Rensar bort sånna som inte loggat ut korrekt.. -------
Connect.Execute  "UPDATE members set status='offline', var_pa_sajten='-', minonline='0' WHERE status='online' AND date_add(datum, interval 40 minute) < now()"
'---------------- SLUT PÅ UTRENSNINGEN ------------------

'--------------------- Kollar om det är ett nytt online rekord

Set Rs = Connect.Execute("SELECT COUNT(username) AS Antalet FROM members WHERE status='online'")

Set Rs2 = Connect.Execute("SELECT antal FROM onlinerekord")

IF Rs("Antalet") > Rs2("antal") Then
Connect.Execute ("UPDATE onlinerekord set antal='"& Rs("Antalet") &"', datum='" & Now() & "', slaf='" & vem & "'")

End If

Rs.Close
Set Rs=Nothing
Rs2.Close
Set Rs2=Nothing
'--------------------- Kollar om det är ett nytt online rekord SLUT
		
		Response.Cookies("SKENE_USER") = "" & session("username") &"" 
		Response.Cookies("SKENE_USER").Expires = "23 Feb, 2007 "
		
		
		Response.Redirect "main.asp"

Else

Session("meddelande") = "   Tyvärr!\n Fel användarnamn eller lösenord. Försök igen!"
Connect.Close
Set Connect = nothing
Response.Redirect "default.asp"

End If

RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = nothing
End If
%>

Tack på förhand :stud

Medlem sedan juni 20019 519 inlägg
#2

En liten sak om man får "klaga":

If Lcase(RecSet("losen")) = Lcase(Request.Form("losen")) Then

vissa personer tycker inte om att man bara ha lcase kombination när det gäller lösenord.. username är OK med lcase men inte lösenordet tycker jag :e ska kolla lite mer på koden och återkommer :e

Medlem sedan maj 2003151 inlägg
#3

Är inte heller så förtjust i d men det var många som ville ha det så.

Medlem sedan juni 20019 519 inlägg
#4

jag ser inte att du använder <!-- #include file="adovbs.inc" -->.. annars ändrade jag bara lite på din kod.. men jag tror det ska vara samma resultat:

<%@ LANGUAGE="VBSCRIPT" %>
<%
Response.Expires=-1
Response.Buffer = True
Session.LCID = 1053
%>
<!-- #INCLUDE VIRTUAL="/include/koppling.asp" -->
<%
Dim vem
vem=lcase(Request.Form("username"))

Set RecSet = Connect.Execute("SELECT * FROM members where username='"& vem &"'")

If RecSet.EOF Then
  Session("meddelande") = "             Tyvärr!\n Finns ingen Slaf som heter "& vem &".\nSäkert att du stavat rätt?"
  Connect.Close
  Set Connect = nothing
  Response.Redirect "default.asp"
Else
'-------------------------------------------
  If Lcase(RecSet("losen")) = Lcase(Request.Form("losen")) Then
'##################### Kontroll om loggat in i dag
    If RecSet("inlogg_datum") <> Date() Then
      Connect.Execute ("update members set points = points +500, inloggad = inloggad +1 where username='" & vem & "'")
    End If
'##################### Slut Koll

    Connect.Execute ("update members set mood='"& Request.Form("mood") &"', datum='" & Now() & "', inloggad = inloggad +1, inlogg_datum='" & Date() & "', inlogg_tid='" & Time() & "', status='online', ip='" & Request.ServerVariables("REMOTE_ADDR") & "' where username='" & vem & "'")

    if RecSet("kon")="Kille" then 
      sex = "P"
    else
      sex = "F"
    end if

    newage= (DateDiff("d", RecSet("foddes"), Now))/365
    newage=formatnumber(newage,2)
    newage=left(newage,2)
		
    Session("sex") = ""& sex &""& newage &""
    Session("username") = RecSet("username")
    Session("stad") = RecSet("stad")
    Session("login") = "ok"
    Session("id") = RecSet("id")
    Session("minonline") = now()
    Session.TimeOut = 40
'----- Rensar bort sånna som inte loggat ut korrekt.. -------
    Connect.Execute  "UPDATE members set status='offline', var_pa_sajten='-', minonline='0' WHERE status='online' AND date_add(datum, interval 40 minute) < now()"
'---------------- SLUT PÅ UTRENSNINGEN ------------------

'--------------------- Kollar om det är ett nytt online rekord
    Set Rs = Connect.Execute("SELECT COUNT(username) AS Antalet FROM members WHERE status='online'")
    dim antal : antal = rs("Antalet")
    rs.close : set recset = nothing

    Set Rs = Connect.Execute("SELECT antal FROM onlinerekord")
    IF antal > Rs("antal") Then
      Connect.Execute ("UPDATE onlinerekord set antal='"& antal &"', datum='" & Now() & "', slaf='" & vem & "'")
      Rs.Close : Set Rs=Nothing
    End If
'--------------------- Kollar om det är ett nytt online rekord SLUT
    Response.Cookies("SKENE_USER") = "" & session("username") &"" 
    Response.Cookies("SKENE_USER").Expires = "23 Feb, 2007 "
    Response.Redirect "main.asp"
  Else
    Session("meddelande") = "   Tyvärr!\n Fel användarnamn eller lösenord. Försök igen!"
    Response.Redirect "default.asp"
  End If
  Connect.Close : Set Connect = nothing
  RecSet.Close : Set RecSet = Nothing
End If
%>
Medlem sedan juni 200032 967 inlägg
#5

Det finns ingen anledning att ha lösenordsjämförelsen i en separat if-sats. In med den i WHERE-satsen i SQL-frågan. Får du resultat, lyckad inloggning, annars inte.

Mvh

Medlem sedan juni 20019 519 inlägg
#6

@nders skrev:

Det finns ingen anledning att ha lösenordsjämförelsen i en separat if-sats. In med den i WHERE-satsen i SQL-frågan. Får du resultat, lyckad inloggning, annars inte.

Mvh

Just det! argh... ska kolla igenom koderna igen :e vänta

Medlem sedan juni 20019 519 inlägg
#7
<%
Dim vem
vem=lcase(Request.Form("username"))
losen=Lcase(Request.Form("losen"))
Set RecSet = Connect.Execute("SELECT * FROM members where username='"& vem &"' and losen = '"&losen&"'")

If RecSet.EOF Then
  Session("meddelande") = "             Tyvärr!\n Finns ingen Slaf som heter "& vem &".\nSäkert att du stavat rätt?"
  Connect.Close : Set Connect = nothing
  Response.Redirect "default.asp"
Else
'##################### Kontroll om loggat in i dag
  If RecSet("inlogg_datum") <> Date() Then
    Connect.Execute ("update members set points = points +500, inloggad = inloggad +1 where username='" & vem & "'")
  End If
'##################### Slut Koll
  Connect.Execute ("update members set mood='"& Request.Form("mood") &"', datum='" & Now() & "', inloggad = inloggad +1, inlogg_datum='" & Date() & "', inlogg_tid='" & Time() & "', status='online', ip='" & Request.ServerVariables("REMOTE_ADDR") & "' where username='" & vem & "'")

  if RecSet("kon")="Kille" then 
    sex = "P"
  else
    sex = "F"
  end if

  newage= (DateDiff("d", RecSet("foddes"), Now))/365
  newage=formatnumber(newage,2)
  newage=left(newage,2)
		
  Session("sex") = ""& sex &""& newage &"" : Session("username") = RecSet("username") : Session("stad") = RecSet("stad") : Session("login") = "ok" : Session("id") = RecSet("id") :  Session("minonline") = now() : Session.TimeOut = 40
  recset.close : set recset = nothing
'----- Rensar bort sånna som inte loggat ut korrekt.. -------
  Connect.Execute  "UPDATE members set status='offline', var_pa_sajten='-', minonline='0' WHERE status='online' AND date_add(datum, interval 40 minute) < now()"
'---------------- SLUT PÅ UTRENSNINGEN ------------------

'--------------------- Kollar om det är ett nytt online rekord
  Set Rs = Connect.Execute("SELECT COUNT(username) AS Antalet FROM members WHERE status='online'")
  dim antal : antal = rs("Antalet")
  rs.close : set rs = nothing

  Set Rs = Connect.Execute("SELECT antal FROM onlinerekord")
  IF antal > Rs("antal") Then
    Connect.Execute ("UPDATE onlinerekord set antal='"& antal &"', datum='" & Now() & "', slaf='" & vem & "'")
    Rs.Close : Set Rs=Nothing
  End If
'--------------------- Kollar om det är ett nytt online rekord SLUT
  Response.Cookies("SKENE_USER") = "" & session("username") &"" 
  Response.Cookies("SKENE_USER").Expires = "23 Feb, 2007 "
  Response.Redirect "main.asp"
Else
  Session("meddelande") = "   Tyvärr!\n Fel användarnamn eller lösenord. Försök igen!"
  Response.Redirect "default.asp"
End If
Connect.Close : Set Connect = nothing
%>

lite mindre kod igen :e fast jag är rätt särker på att den går att krympa ner och göra snabbare :e

Medlem sedan maj 2003151 inlägg
#8

Tog bort variablen losen och satte Request.Form("losen") direkt i SQL satsen.

Medlem sedan juni 20019 519 inlägg
#9

det är både bra och dåligt :e eftersom den inloggnings koden är inte så "säker" det räcker att någon skriver ' så crashar det :e

Function secure(txt) 
txt = Replace(txt, "'", "''") 
secure = txt 
End Function

och använd

secure(request.form("losen")

isåfall..

Medlem sedan maj 2003151 inlägg
#10

fick detta fel mess dock ;)

Microsoft VBScript compilation error '800a03f6'

Expected 'End'

/logga_in.asp, line 59

Else

Medlem sedan juni 20019 519 inlägg
#11

lägg till en end if vid den sista end if :e tog nog bort den innan för jag hittade inte riktigt vad den skulle vara bra för :e - Just vaknat begär inte för mycket av mig :e

Medlem sedan maj 2003151 inlägg
#12

tog bort:

Else
  Session("meddelande") = "   Tyvärr!\n Fel användarnamn eller lösenord. Försök igen!"
  Response.Redirect "default.asp"

eftersom vi redan har frågat det i SQL satsen.

Medlem sedan juni 20019 519 inlägg
#13

SQL satsen kontrollera bara om det finns en användare och ett lösenord som passar... så else-satsen tycker jag du inte ska ta bort för annars händer det inget :e

Medlem sedan maj 2003151 inlägg
#14

Kan jag inte bara skriva:

Replace(Request("losen"),"'","''")

i SQL satsen istället?

Medlem sedan maj 2003151 inlägg
#15

Jo vi har ju redan en IF sats:

If RecSet.EOF Then

Medlem sedan juni 20019 519 inlägg
#16

jo det kan du också göra... funktioner är egentligen menat bara om du ska skriva 2+ st sådna replace så går det ju lite smidigare att skriver secure() istället för replace varje gång... du bör göra detta också på användarnamnet REDIGERAD:

pRob3 skrev:

Jo vi har ju redan en IF sats:

If RecSet.EOF Then

Just det! :e dumt av mig :e

Medlem sedan maj 2003151 inlägg
#17

hahaha väldigt ;)

så här ser koden ut njuu:

<%@ LANGUAGE="VBSCRIPT" %>
<%
Response.Expires=-1
Response.Buffer = True
Session.LCID = 1053
%>
<!-- #INCLUDE VIRTUAL="/include/koppling.asp" -->
<%
Function secure(txt) 
txt = Replace(txt, "'", "''") 
secure = txt 
End Function 

Dim vem
vem=lcase(Request.Form("username"))

Set RecSet = Connect.Execute("SELECT * FROM members where username='"& secure(request.form("username")) &"' and losen = '"& secure(request.form("losen")) &"'")

If RecSet.EOF Then
  Session("meddelande") = "   Tyvärr!\n Fel användarnamn eller lösenord. Försök igen!"
  Connect.Close : Set Connect = nothing
  Response.Redirect "default.asp"
Else
'##################### Kontroll om loggat in i dag
  If RecSet("inlogg_datum") <> Date() Then
    Connect.Execute ("update members set points = points +500, inloggad = inloggad +1 where username='" & vem & "'")
  End If
'##################### Slut Koll
  Connect.Execute ("update members set mood='"& Request.Form("mood") &"', datum='" & Now() & "', inloggad = inloggad +1, inlogg_datum='" & Date() & "', inlogg_tid='" & Time() & "', status='online', ip='" & Request.ServerVariables("REMOTE_ADDR") & "' where username='" & vem & "'")
  if RecSet("kon")="Kille" then 
    sex = "P"
  else
    sex = "F"
  end if
  newage= (DateDiff("d", RecSet("foddes"), Now))/365
  newage=formatnumber(newage,2)
  newage=left(newage,2)

  Session("sex") = ""& sex &""& newage &""
  Session("username") = RecSet("username")
  Session("stad") = RecSet("stad")
  Session("login") = "ok"
  Session("id") = RecSet("id")
  Session("minonline") = now()
  Session.TimeOut = 40
  
  recset.close : set recset = nothing
'----- Rensar bort sånna som inte loggat ut korrekt.. -------
  Connect.Execute  "UPDATE members set status='offline', var_pa_sajten='-', minonline='0' WHERE status='online' AND date_add(datum, interval 40 minute) < now()"
'---------------- SLUT PÅ UTRENSNINGEN ------------------
'--------------------- Kollar om det är ett nytt online rekord
  Set Rs = Connect.Execute("SELECT COUNT(username) AS Antalet FROM members WHERE status='online'")
  dim antal : antal = rs("Antalet")
  rs.close : set rs = nothing
  Set Rs = Connect.Execute("SELECT antal FROM onlinerekord")
  IF antal > Rs("antal") Then
    Connect.Execute ("UPDATE onlinerekord set antal='"& antal &"', datum='" & Now() & "', slaf='" & vem & "'")
    Rs.Close : Set Rs=Nothing
  End If
'--------------------- Kollar om det är ett nytt online rekord SLUT
  Response.Cookies("SKENE_USER") = "" & session("username") &"" 
  Response.Cookies("SKENE_USER").Expires = "23 Feb, 2007 "
  Response.Redirect "main.asp"

End If
Connect.Close : Set Connect = nothing
%>

P.s grym sida du hade. D.s.

P.s du hade glömt en ) i slutet av secure(request.form("losen") ;) D.s.

Medlem sedan juni 20019 519 inlägg
#18
Set RecSet = Connect.Execute("SELECT * FROM members where username='"& secure(request.form("username")) &"' and losen = '"& secure(request.form("losen")) &"'")

eftersom du har

vem = request.form("username")

så kan du ersätta secure(request.form("username") till

Set RecSet = Connect.Execute("SELECT * FROM members where username='"& secure(vem) &"' and losen = '"& secure(request.form("losen")) &"'")
Medlem sedan maj 2003151 inlägg
#19

vilket är egentligen bäst (minst resurs krävande och snabbast) sätta en variabel som man ropar o skriker efter eller gapa o gasta efter request.form?

Medlem sedan juni 20019 519 inlägg
#20

Om du bara ropar efter request.form 1 gång eller så så tror jag det kvittar...

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)