28. november 2003 - 00:14Der er
28 kommentarer og 1 løsning
Login problem
Jeg kan godt logge en bruger ind og han bliver så redirectet til en ny side. Men når man så trykker på et link i menuen er det ligesom om den glemmer at man er logget ind. Der er underpunkter i menuerne hvor man skal være logget ind osv. Men den sender bare en videre som om man ikke var logget ind. timeout står til default.
Sig endelig hvis i skal vide mere og hvad mere i gerne vil vide :)
Set RS = myConn.Execute ("SELECT * FROM bruger_tbl WHERE bruger_brugernavn='" & username & "' AND bruger_adgangskode='" & password & "'") If RS.EOF Then
response.write "Du har indtastet et forkert brugernavn eller password"
Else Session("login") = "true" Session("user_id") = rs("bruger_id") Response.Redirect "bruger.asp" End If
RS.Close Set RS = Nothing myConn.Close Set myConn = Nothing
Hvad er i øvriogt dit formål med dette: If Len(Username) > 0 Then Username = Replace(Username, "'", "''") End if If Len(Password) > 0 Then Password = Replace(Password , "'", "''") End if
Jeg har prøvet med en boolean i stedet for en tekststreng, det gav det samme resultat. Mht. det andet der, så er det vist nok noget med mellemrum eller et eller andet, ved det ikke helt, var noget jeg fik af vide jeg skulle skrive af en kammerat.
Man anvender det lille replace-trick når man indsætter tekststrenge i databaser (i hvert fald Access og SQL Server). Syntaksen for insert er jo: INSERT INTO MyTabel (Field1,Field2) Values('String1','String2') Hvis man havde et eller flere ' i sin tekststreng ville der gå kage i funktionen: INSERT INTO MyTabel (Field1,Field2) Values('String1','String'med'tre'') Derfor laver man en replace inden man sætter ind i databasen: Dim MyString MyString = Replace("String'med'tre'", "'", "''") INSERT INTO MyTabel (Field1,Field2) Values('String1','" & MyString & "'") (det gælder naturligvis også med UPDATE)
Databasen finder selv ud af at indsætte et enkelt ' i stedet for '', som jo egentlig var det man sendte til databasen med sin SQL streng.
Derfor er det ikke nødvendigt at lave en replace når man henter fra databasen, da det er anført korrekt i databasens tabel
ellers ser scriptet ud til at skulle virke og du får jo også en redirect til den rigtige side (husk lige at lukke forbindelsen til databasen inden du redirecter). Problemet må ligge på de sider der linkes til i din menu - har du tjekket scriptet der validerer brugerens status på de sider?
Jamen, det script der er på de sider i menuen der tjekker login, er jo netop ens med det jeg har pastet længere oppe. Det er bare ikke på alle siderne. f.eks kan man trykke på et link og komme på en side hvor den ikke tjekker, og så først på den side er der et link til en side hvor den tjekker for om man er logget ind, og det er det som ikke virker.
-> roger: Det må du lige forklare yderligere. Hvis brugernavn og password ligger i en database og man kun kommer igennem hvis man kender en korrekt kombination, hvordan kan man så logge ind?
-> hardtimes: Og der er ikke noget på de sider, hvor der ikke skal tjekkes, som kan 'resete' session værdien?
-> roger: og jeg prøver lige at gøre min sætning færdig ;-) Hvis brugernavn og password ligger i en database og man kun kommer igennem hvis man kender en korrekt kombination, hvordan kan man så logge ind uden at kende denne kombination. Og hvordan kan replace-funktionen forhindre dette?
Nope, ikke det mindste. Det er jo derfor jeg har et login problem :) Men skal da gerne lige køre et dobbelttjek på det, men sidst jeg kiggede efter var der ikke noget.
Klingenberg det er et klassisk eksempel....hvad nu hvis jeg ved brugernavn f.eks. skriver: ' OR 'a'='a
så vil select se således ud:
SELECT * FROM bruger_tbl WHERE bruger_brugernavn='' OR 'a'='a' osv..
det samme kunne jeg skrive ved password, og vupti så har jeg gyldig login-session.
Når hardtimes replacer alle ' så kan man ikke lave dette lille trick.
Men det er altid farligt at lade brugerne styre sql-sætninger, for har de bare en lille smule indsigt i SQL kan de virkelig lave rav i den...f.eks. er drop table er ikke rar at få eksekveret :)
-> roger: Det var oplysende. tak! det vil jeg tænke lidt mere over ift. de systemer jeg sidder med. har du kendskab til websites der behandler dette emne mere detaljeret?
lklingenberg du får sq pointene :) Jeg tjekkede lige igennem og så var der sq en session.abandon der havde fået sneget sig ind :) fatter nu ikke jeg så den i første omgang... men smid lige et svar så du kan få point.
i don't care, du hjalp mig med at finde fejlen som har irriteret mig længe. Havde ikke kigget koden igennem igen hvis du ikke havde skrevet det så jeg synes du skal have pointene, og aner ikke hvordan jeg skal give dig mindre. Så du får dem uanset om du vil eller ej :)
hm, gad vide om coadmin synes det er lidt i overkanten. hvis du vil have nogle af dine points tilbage, så opretter jeg gerne et spm. med points til dig...
Mht. "aner ikke hvordan jeg skal give dig mindre".. Hvis I begge to lægger et svar, kan man via "Avanceret" selv bestemme hvor meget hver bruger skal ha'.. Det skal lige siges, at jeg ikke er helt sikker, da jeg ikke har prøvet det før..
han må give besked ham coadmin hvis han synes det er for meget. Jeg synes ikke det er meget for at jeg kunne blive færdig med mit arbejde. Men det er jo så op til ham at bedømme. så må vi se, men pt. er jeg bare glad og synes du har fortjent de point... :)
Du bestemmer selv hvor mange points du vil give for en besvarelse. CoAdmins blander sig ikke i det (og bør heller ikke gøre det), med mindre du har været uretfærdig. F.eks. hvis du giver lklingenberg 1 point og tager resten selv. CoAdmins har vigtigere ting at tage sig til, end at skulle fortolke en spørgers holdning mht points :) De er jo dine points.. giv så meget du vil.. dog max 200 points :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.