webForumDet fria alternativet

Fel på inloggnignsscript.

ASP

4 svar · 302 visningar · startad av hallmert

Medlem sedan dec. 2004182 inlägg
Frågan#1

Hej,

Här kommer jag med ett inloggningsscript, men det är någonting som buggar tror jag. Ibland när man skriver i grejer för att logga in (då kommer man alltså hit där man verifieras), så händer det ingenting, det blir fel, man kommer bara till loginsidan igenm, utan några som helst Session("meddelande") eller servergenererade fel, det är mycket märkligt.

Är det någon som ser något fel här? Går det att utföra dessa saker på något annat vis, direkt i SQL-strängar eller någonting etc. Jättetacksam för all hjälp! /Patrik

<!-- #include file="adovbs.inc" -->

<%

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/fanclub.mdb")&";pwd=losen"

Set RecSet = Server.CreateObject("ADODB.Recordset")

Addera = "Select * From members"
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

Do Until RecSet.EOF

	If RecSet("status") = "online" AND DateDiff("n", RecSet("datum"), Now) > 45 Then
		RecSet("status") = "offline"
		Response.Redirect "default.asp?visaSida=start"
		RecSet.Update
	End If
	
RecSet.MoveNext
Loop
	
RecSet.Close
	
	
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

Do Until RecSet.EOF

	If LCase(RecSet("username")) = LCase(Request.Form("username")) AND RecSet("losen") = Request.Form("losen") Then
	
		RecSet("datum") = Now
		RecSet("status") = "online"
		
		
		RecSet.Update
		
		Session("namn") = RecSet("fnamn") & " " & RecSet("enamn")
		Session("fnamn") = RecSet("fnamn")
		Session("enamn") = RecSet("enamn")
		Session("username") = RecSet("username")
		Session("login") = "ok"
		Session("id") = RecSet("id")
		Session("status") = "Online"
		Session("epost") = RecSet("epost")

		Session.TimeOut = 40

		RecSet.Close
		Connect.Close
		Set RecSet = nothing
		Set Connect = nothing
		
		Response.Redirect "default.asp?visaSida=fanclub"

	End If

RecSet.MoveNext
Loop

RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
Session("meddelande") = "Fel användarnamn och/eller lösenord!"
Response.Redirect "default.asp?visaSida=start"

%>
Medlem sedan juni 200032 967 inlägg
#2

Är det någon som ser något fel här?

  1. Du loopar igenom hela tabellen för att uppdatera vilka som är online / offline. Helt onödigt. Ställ en enda UPDATE-fråga mot tabellen.
  2. Du öppnar samma recordset igen, genom att exekvera samma SQL-fråga igen. Onödigt.
  3. Du loopar igenom hela tabellen för att se om man loggat in riktigt. Illa, ställ villkoren i SQL-frågan.
  4. Du skapar väldigt många sessionsvariabler. Behöver du verkligen alla?
  5. Du borde byta till OLEDB-connectionstring (lite snabbare) istället för att använda Access-drivern till din databasanslutning.

Koden du postar går att få ner till c:a 15 rader, mycket snabbare och effektivare.

Där fick du något att tugga på. :)

Medlem sedan dec. 2004182 inlägg
#3

@nders skrev:

Är det någon som ser något fel här?

  1. Du loopar igenom hela tabellen för att uppdatera vilka som är online / offline. Helt onödigt. Ställ en enda UPDATE-fråga mot tabellen.
  2. Du öppnar samma recordset igen, genom att exekvera samma SQL-fråga igen. Onödigt.
  3. Du loopar igenom hela tabellen för att se om man loggat in riktigt. Illa, ställ villkoren i SQL-frågan.
  4. Du skapar väldigt många sessionsvariabler. Behöver du verkligen alla?
  5. Du borde byta till OLEDB-connectionstring (lite snabbare) istället för att använda Access-drivern till din databasanslutning.

Koden du postar går att få ner till c:a 15 rader, mycket snabbare och effektivare.

Där fick du något att tugga på. :)

Jepp, behöver alla sessionvariablar.
Jag vore väldigt väldigt tacksam om du kunde hjälpa mig med att skriva ihop det jag behöver, snälla snälla @? *Hundvalpsögon*

Medlem sedan juni 200032 967 inlägg
#4

Jag ser ju helst att du skriver ihop det själv, så du lär dig saker och ting, men men...

Eftersom du måste ha så många sessionsvariabler så blev det inte riktigt femton rader, men, om du ersätter hela ditt kodschabrak med följande, så borde det kanske funka lite bättre och mer effektivt:

<%
Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/fanclub.mdb")&";password=losen"
strUpdateSQL = "UPDATE members SET status = 'offline' WHERE datediff('n', datum, now()) > 45"
Connect.Execute strUpdateSQL,,128

strSQL = "SELECT * FROM members WHERE lcase(username) = '" & replace(request.form("username"), "'", "''") & "' AND losen = '" & replace(request.form("losen"), "'", "''") & "'"
Set RecSet = Connect.Execute (strSQL)
If not RecSet.EOF Then
	' Inloggningen lyckades!
	objConn.Execute "UPDATE members SET datum = now(), status = 'online' WHERE id = " & RecSet("ID")
	Session("namn") = RecSet("fnamn") & " " & RecSet("enamn")
	Session("fnamn") = RecSet("fnamn")
	Session("enamn") = RecSet("enamn")
	Session("username") = RecSet("username")
	Session("login") = "ok"
	Session("id") = RecSet("id")
	Session("status") = "Online"
	Session("epost") = RecSet("epost")
	Session.TimeOut = 40
	strURL = "default.asp?visaSida=fanclub"
Else
	Session("meddelande") = "Fel användarnamn och/eller lösenord!"
	strURL = "default.asp?visaSida=start"
End if

RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
Response.Redirect strURL
%>
Medlem sedan dec. 2004182 inlägg
#5

@nders!

Tusen tack, du är en pärla :)
Jag ska prova koden så fort jag kommer hem
till min egna lilla koja igen :)

271 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)