När du jämför värderna så gör du om alla bokstäver till stora med UCase() eller till små med LCase, vilket spelar ingen roll det får du avgöra själv.
If UCase(strUser1) = UCase(strUser2) Then
21 svar · 573 visningar · startad av Dashi
Har en inloggning på en asp sida, med en databas, den kollar lösenordet och användarnamnet i databasen, men problemet är att om jag skapar en användare som t.ex är: Test då måste jag logga in med stort T eftersom det står med stort T i databasen, funkar inte annars att logga in, hur gör jag för att den ska logga in även om jag skriver Test eller om jag skriver test??
Mvh //Darek
När du jämför värderna så gör du om alla bokstäver till stora med UCase() eller till små med LCase, vilket spelar ingen roll det får du avgöra själv.
If UCase(strUser1) = UCase(strUser2) Then
Poffe skrev:
När du jämför värderna så gör du om alla bokstäver till stora med UCase() eller till små med LCase, vilket spelar ingen roll det får du avgöra själv.
If UCase(strUser1) = UCase(strUser2) Then
fattar inte :P om det ser ut såhär var ska den raden sitta?
<% Dim RS, Conn, SQL, Anv, Passwd
Anv = Replace(Trim(Request.Form("Anv")),"'","")
Passwd = Replace(Trim(Request.Form("Passwd")),"'","")
If Anv = "" Or Passwd = "" Then
Response.Redirect("inloggning.asp")
End If
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
Conn.Open "DSN=kopplingsnamn"
SQL = "SELECT * FROM tabellnamn WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"
RS.Open SQL, Conn, 0, 1
If RS.EOF = TRUE Then
RS.Close
Conn.Close
Response.Redirect("inloggning.asp")
Else
If Anv = RS("User") AND Passwd = RS("Losen") Then
Session.Timeout = 20
Session("UserId") = RS("ID")
RS.Close
Conn.Close
Response.Redirect("doldsida.asp")
Else
RS.Close
Conn.Close
Response.Redirect("inloggning.asp")
End IF
End If %>
SQL = "SELECT * FROM tabellnamn WHERE ucase(User) = '" & ucase(Anv) & "' AND ucase(Losen) = '" & ucase(Passwd) & "'"
varför ska den inte vara Case sensitivty... iallafall på lösenordet... ger mer särkerhet ju
kan också lägga in den på rad:
If ucase(Anv) = ucase(RS("User")) AND ucasePasswd) = ucaseRS("Losen")) Then
istället...
voigtann1 skrev:
SQL = "SELECT * FROM tabellnamn WHERE ucase(User) = '" & ucase(Anv) & "' AND ucase(Losen) = '" & ucase(Passwd) & "'"varför ska den inte vara Case sensitivty... iallafall på lösenordet... ger mer särkerhet ju
kan också lägga in den på rad:
If ucase(Anv) = ucase(RS("User")) AND ucasePasswd) = ucaseRS("Losen")) Thenistället...
Vet ej, testanvändare som testat sidan tyckte det va jobbigt för dom registrera sig sedan testa dom logga in, så funka inte det.. och dom tyckte det va skitjobbigt, och sa att dom aldrig skulle tänka sig att logga in på den sidan.. då överlever dom hellre utan.. och vill inte att mina vanliga användare ska tänka så, och eftersom det är en webshop så vill jag helst inte skrämma iväg kunder..
De flesta har ju så att på användarnamnet spelar det ingen roll om det är stora eller små bokstäver men att det ska vara det på lösenordet.
Varför kollar du om man skrivit in rätt användarnamn och lösenord två gånger? En gång i SQL-frågan och en gång med en if-sats.
Jag hade nog skrivit nått sånt här
Anv = Replace(Trim(Request.Form("Anv")),"'","")
Passwd = Replace(Trim(Request.Form("Passwd")),"'","")
bolOK = False
If Len(Anv) > 0 And Len(Passwd) > 0 Then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=kopplingsnamn"
Set RS = Conn.Execute("SELECT ID FROM tabellnamn WHERE UCase(User) = '" & UCase(Anv) & "' AND Losen = '" & Passwd & "'")
If Not RS.EOF Then
Session.Timeout = 20
Session("UserId") = RS("ID")
bolOK = True
End If
RS.Close: Set RS = Nothing
Conn.Close: Set Conn = Nothing
End If
If bolOK Then
Response.Redirect("doldsida.asp")
Else
Response.Redirect("inloggning.asp")
End If
Gör samma sak men med lite mindre kod.
Dashi skrev:
testanvändare som testat sidan tyckte det va jobbigt för dom registrera sig sedan testa dom logga in, så funka inte det.. och dom tyckte det va skitjobbigt, och sa att dom aldrig skulle tänka sig att logga in på den sidan.. då överlever dom hellre utan.. och vill inte att mina vanliga användare ska tänka så, och eftersom det är en webshop så vill jag helst inte skrämma iväg kunder..
Min reflektion över det hela, är att om det är en webshop, borde väl kunderna vara måna om säkerheten, så ingen annan beställer en massa saker i deras namn. Men det kanske går att ordna säkerheten på något annat vis? Det är ju långt ifrån alla webshoppar som kräver inloggning.
men grejen e det.. om jag nu fixar till detta då kommer nästa problem, eftersom när man loggar in så kollar den på alla sidor som är ``skyddade´´ om sessionen stämmer överens med querystringen.. och där blir det problem.. ID.et är användarnamnet, så har man reggat användarnamn Test så blir sessionen = Test och använder jag då ucase så blir resultatet följande:
If Not Test = TEST och det leder till att man bli skickad till error sidan :)
<%
anv = Replace(Request.QueryString("ID"), "'", "''")
If NOT Session("UserId") = anv Then
Response.Redirect "error.asp?Fel=4"
End If
%>
Varför skickar du med användarnamnet i en querystring?
För att jämföra måste du ju självklart formatera om båda strängarna till stora bokstäver
If NOT UCase(Session("UserId")) = UCase(user) Then
Poffe skrev:
Varför skickar du med användarnamnet i en querystring?
För att jämföra måste du ju självklart formatera om båda strängarna till stora bokstäver
If NOT UCase(Session("UserId")) = UCase(user) Then
oki så de går formantera om sessionen då? för jag trodde att det inte gick.. pga den delen av sql-injections som man använder sig genom url:n asså t.ex att om man nu skulle skriva in inloggning.asp?anv=Nisse så kommer man inte in pga att sessionen inte är nisse då, och sessionen nisse skapas endast vid en lyckad inloggning av användaren Nisse.. :P
Men du hämtar ju värdena för inloggningen via form inte querystring, alltså kan man ju inte logga in genom att skriva inloggning.asp?anv=Nisse. Även om du skulle använda querystrings måste man ju ha rätt lösenord för att logga in också.
nepp de e just det inte behövs.. på login.asp skriver du in värden, dom kollas där, efter det är rätt skickas du till inloggning.asp och får då en url som ser ut typ såhär.. inloggning.asp?anv=test&passwd=test på inloggning.asp ligger ingen databas chekning, inte heller på dom andra sidorna som där finns länkar till på inloggning.asp och därför måste jag då skicka dom vidare med querystring.. och därför kollas sessionen och querystringen.. , för tidigare kunde man bara skriva in inloggning.asp?anv=Nisse så kom man in och kunde ändra alla uppgifter o.s.v
Men du ska ju bara kolla användarnamn och lösenord en gång. Om de stämmer så skapas en session och för att kolla om man är inloggad kollar du om rätt session finns. Du behöver inte kolla värdet på varje sida.
Poffe skrev:
Men du ska ju bara kolla användarnamn och lösenord en gång. Om de stämmer så skapas en session och för att kolla om man är inloggad kollar du om rätt session finns. Du behöver inte kolla värdet på varje sida.
jo för kolla här, om jag går in på ändra uppgifter (andrauppg.asp) så finns där en tabell som kollar databasen med recset efter värden som sätts in i tabellen, och den kollar olika i databasen för varje användare, så skriver man då andrauppg.asp?anv=Nisse så skulle man få uppgifter om Nisse..
Men du har ju användarnamnet i en session, jämför med den i stället för querystringen.
installningar.asp:
<% anv = Replace(Request.Querystring("anv"), "'", "''") %>
<a href="andrauppg.asp?anv=<%=anv%>" target="main">Ändra
Uppgifter</a>
andrauppg.asp:
<%
anv = Cstr(Request.Querystring("anv"))
Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(databas)
Visa = "SELECT * FROM tabellnamn WHERE anv = '" & Replace(anv, "'", "''") & "' ORDER BY anv"
RS.Open Visa, conn, adOpenStatic, adLockOptimistic %>
om jag ändå bytar ut till:
<% anv = Replace(session("vem"), "'", "''") %>
anv = Cstr(session("vem"))
så kan man ändå skriva då andrauppg.asp?anv=Nisse och få information om denna..
Det räcker ju med att du skriver så här i andrauppg.asp
<%
anv = Cstr(session("vem"))
Set conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(databas)
Visa = "SELECT * FROM tabellnamn WHERE anv = '" & Replace(anv, "'", "''") & "' ORDER BY anv"
RS.Open Visa, conn, adOpenStatic, adLockOptimistic %>
Varför hålla på och skicka värdet genom querystrings när det redan finns i sessionen?
men det gör ju inget ifs om jag kör detta jag kör, blir ju inte negativt på något sätt?
Som vi sagt tidigare, du får självklart göra precis som du själv vill.
Poffe skrev:
Som vi sagt tidigare, du får självklart göra precis som du själv vill.
nene mena inte så, det va en fråga asså, väntade mer mig ett svar att sidan blir snabbare eller nåt eftersom jag har mindre kod då :) för det är det enda positiva jag kom på med det.. därför jag undra om du kom på något mer som va positivt med det..
men sen så blir det ändå en negativ grej med att köra de med sessioner.. vi tar ett litet dumt exempel hehe :)
vi säger jag har en hata Poffe klubb, hehe, och så skriver jag i installningar.asp dom länkarna som finns där och under det skriver jag Rule For Hata Poffe, och så vill inte jag att du ska se det, du är inte inloggad och går in på installningar.asp då ser du alla länkar och all text på sidan.. och då blir den ändå inte skyddad ju och sedan när du går in på andrauppg.asp så kommer en sidan kunde inte visas sida upp, innan va det ju att om man kom in på dom sidorna och inte va inloggad så fick man endast se Du Har Ej Behörighet Till Denna Sida!