Toon posts:

[ASP]Login procedure

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heren, dames,

Ben bezig met een inlogprocedure voor een te ontwikkelen applicatie. Ben nog niet zo'n expert, dus er gaat iets mis :).

Er hangt even een simpel Access db'tje achter, met daarin een aantal gebruikersnamen en wachtwoorden. Probleem is echter dat met dit scriptje, slechts de eerste username/wachtwoord combinatie accoord wordt bevonden, de rest lust ie niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@language="VBScript"%>
<% Option Explicit

dim sConnStr
dim sSQL
dim oConn
dim oRS
dim strUserName
dim strPassWord
dim strUserNameForm
dim strPassWordForm
dim sSubMit

sConnStr ="DSN=verslagen"
sSQL = "select strUserName, strPassWord from tblUsers"
set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open(sConnStr)

sSubmit = Request.Form("verzend")
        if sSubmit <> "" then
        set oRS = oConn.Execute(sSQL)
        strUserNameForm = Request.Form("userID")
        strPassWordForm = Request.Form ("password")
            if (oRS.Eof and oRS.Bof) <> true then
            strUserName = (oRS("strUserName"))
            strPassWord = (oRS("strPassWord"))
                if strUserName = strUserNameForm and strPassWord = strPassWordForm then
                Session("bLoginOk") = True
                Response.Redirect ("login_ok.asp")
                Else
                Response.Write ("Onjuiste Username en/of wachtwoord!")
                end if
            Else
            End if
        Else
        End if  
        
%>

Hieronder volgt het inlogformulier met oninteressante html code. De waarden die in het form worden meegegeven zijn uiteraard de waarden die in het bovenstaande gedeelte worden opgevraagd.

Mijn vraag uiteraard: waarom leest ie niet door de hele recordset heen en pakt ie alleen het eerste record?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Waar zou dit script dan door de record set moeten lopen? Zie je ergens een lus?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • QuadrifoglioVerde
  • Registratie: April 2002
  • Laatst online: 28-07-2024
De nodige code om naar het volgende record te springen ontbreekt. Je moet een do...loop of iets dergelijks gebruiken. Ipv direct "passwoord ongeldig" te schrijven moet je verderzoeken in de table naar een passend ID/pwd combinatie.
De combinatie is slechts ongeldig indien je alle records nagekeken hebt.

Verwijderd

is het niet handiger om bij:
sSQL = "select strUserName, strPassWord from tblUsers"
het password op te vragen uit de db bij de op het form ingevulde username??

Anders moet je een lus erin bouwen waarbij hij alle username en passwords afloopt...maar dat lijkt me langer te duren en meer belastend dan het opvragen van het wachtwoord bij een username.

----------------
Misschien heb je hier wat aan:
<%
validpwd = true

If request.form("submit") <> "" Then

' setup variables
userid = Request.Form("userid")
passwd = Request.Form("passwd")

Set conn = Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("db.mdb") & ";User ID=;Password=;"
Set rs = conn.Execute( "Select * from [Members] where [username] = '" & UCASE(userid) & "'")
If not rs.eof then
If ucase(rs("password")) = ucase(passwd) Then
validpwd = true
Else
validpwd = false
End If
Else
validpwd = false
end if

rs.Close
Set rs=Nothing
conn.close
set conn = nothing

If validpwd Then
Session("status") = "login"
Session("username") = userid

response.redirect "default.asp"
End If

End If
%>

<html>
<head>
<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="Microsoft FrontPage 4.0">


<script language="JavaScript">
<!-- start Javascript

var errfound = false;

function error(elem, text) {
if (errfound) return;
window.alert(text);
elem.select();
elem.focus();
errfound = true;
}

function loginCheck(f) {

errfound = false;

if (f.userid.value == "")
error(f.userid,"Please enter your user id!");

if (f.passwd.value == "")
error(f.passwd,"Please enter your password!");

return ! errfound;
}

// end Java script -->
</script>


</head>


<body leftmargin=0 topmargin=0 marginheight=0 marginwidth=0>

<table width="600" border="0" cellspacing="0" cellpadding="2" align="center">
<tr>
<td></td>
</tr>
</table>


<% If not validpwd Then %>
<p><font color="#FF0000">Verkeerde loginnaam of Password!</font></p>
<% End If %>

<form action="login.asp" method="post" onSubmit="return loginCheck(this);">

<table width="600" border="0" cellspacing="0" cellpadding="2" align="center">
<tr><td align="left">Loginnaam</td>
<td><input name="userid" type="TEXT"size="20"></td></tr>
<tr><td align="left">Password</td>
<td><input name="passwd" TYPE="PASSWORD" size="10"></td></tr>
<tr><td> </td></tr>
<tr><td colspan="2"><input type="submit" name="submit" value="Login"></td></tr>
</table>
<br>

</form>
<br>


</body>
</html>

Verwijderd

lus is niet nodig, uitkomst query is (bij goede combinatie)maar 1 record...


probeer SQL: "select username, password from tabel
where user="+strUserName+" and password="+strPassWord+";"

waar de quotes vooraf moeten worden gegaan door ge-escapete quotes, om zo een juiste query te krijgen.

TIP, laat je query op het scherm verschijnen voor je hem uitvoert, dan kun je hem copy-pasten in een access-query en zo de boel testen

Succes

Wzard

  • Tommel
  • Registratie: November 2000
  • Niet online
Ik doe altijd dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Gebruikersnaam = Request.Form("Gebruikersnaam")
check Gebruikersnaam //check is eigen functie voor ongeldige zooi
Wachtwoord = Request.Form("Wachtwoord")
check Wachtwoord

SQL_STRING = "SELECT Gebruikersnaam,Wachtwoord 
FROM USERS 
WHERE Gebruikersnaam='" & Gebruikersnaam & "' 
AND Wachtwoord='" & Wachtwoord & "';"  

'Response.write(SQL_STRING)

Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open SQL_STRING, DB_CONN, adOpenStatic, adLockOptimistic, adCmdText
If RS.BOF And RS.EOF Then
  ' nie goei
Else    
  ' wel goei
End if

Verwijderd

Topicstarter
Mensen, dank voor jullie snelle reacties!
Ik ga e.e.a. uitproberen.

Had zelf nog geen ervaring met Do..loop's en de bovengenoemde SQL query had ik inderdaad al geprobeerd, voorlopig echter zonder resultaat (
edit:
Ik was de single quootjes dus vergeten
. Ik ga iig verder:)

Verwijderd

Op maandag 15 april 2002 17:27 schreef wzard het volgende:
lus is niet nodig, uitkomst query is (bij goede combinatie)maar 1 record...

probeer SQL: "select username, password from tabel
where user="+strUserName+" and password="+strPassWord+";"
Dan mot je ook nog ff je password met de Request vergelijken, die is namelijk case-sensitive, en dat is SQL niet ;)

Verwijderd

Niet loopen: Kijk hierboven. Een query draaien is sneller dan 300 query's. Nu zal je er nog geen last van hebben alleen als je echt een hoop users hebt dan ga je dit wel merken!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je kan beter niet EN op naam EN wachtwoord selecteren. Als je niet goed filtert kan je dan bijv in t passwordveld: een_nep_wacht_woord & " OR WHERE 1=1 " & tikken en hij vindt een hele zooi records (dus RS.EoF != true).

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 12:10
Op dinsdag 16 april 2002 08:03 schreef Gert het volgende:
Je kan beter niet EN op naam EN wachtwoord selecteren. Als je niet goed filtert kan je dan bijv in t passwordveld: een_nep_wacht_woord & " OR WHERE 1=1 " & tikken en hij vindt een hele zooi records (dus RS.EoF != true).
dan moet je goed filteren :) simpel

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • Tommel
  • Registratie: November 2000
  • Niet online
Op dinsdag 16 april 2002 08:03 schreef Gert het volgende:
Je kan beter niet EN op naam EN wachtwoord selecteren. Als je niet goed filtert kan je dan bijv in t passwordveld: een_nep_wacht_woord & " OR WHERE 1=1 " & tikken en hij vindt een hele zooi records (dus RS.EoF != true).
Gebruik altijd de Replace() functie.
Iedere goede webdeveloper controleert toch altijd zijn invoer vanuit een formfield hoop ik??
code:
1
2
3
function Check(tekst)    
  tekst = Replace(tekst, "'","''")
End function
Pagina: 1