Avatar billede hardtimes Nybegynder
28. november 2003 - 00:14 Der 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 :)
Avatar billede thesurfer Nybegynder
28. november 2003 - 00:17 #1
hvad bruger du til at "huske" at brugeren er logget ind?
cookies/sessions/database..?
Avatar billede hardtimes Nybegynder
28. november 2003 - 00:21 #2
jeg bruger en session
Avatar billede lklingenberg Nybegynder
28. november 2003 - 01:11 #3
hvordan se koden ud der tjekker om brugeren har adgang til at se fx ekstra menuer?
Avatar billede hardtimes Nybegynder
28. november 2003 - 01:15 #4
<%
response.buffer = True

If Session("login") <> "true" Then
    response.redirect "anmeld_opret.asp"
Else

End If
%>
Fordi der ikke er noget mellem else og if, er fordi sådan plejer jeg at gøre og så viser den, siden som skal vises når man er logget ind.
Avatar billede lklingenberg Nybegynder
28. november 2003 - 01:17 #5
Og hvordan se koden ud der sætter Session("login")?
Avatar billede hardtimes Nybegynder
28. november 2003 - 01:20 #6
If Mode = "Login" Then



    Username = Request.Form("brugernavn")
    Password = Request.Form("adgangskode")

    If Len(Username) > 0 Then
        Username = Replace(Username, "'", "''")
    End if
    If Len(Password) > 0 Then
        Password = Replace(Password , "'", "''")
    End if

    Conn = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/database.mdb") & ""
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open Conn

    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

  End If
  %>
Avatar billede lklingenberg Nybegynder
28. november 2003 - 01:29 #7
Prøv at anvende en boolen værdi i stedet for en tekststreng:

I login scriptet:
...
Else
  Session("login") = True
...

I scriptet der tjekker rettigheder:
If Session("login") <> True Then response.redirect "anmeld_opret.asp"
Avatar billede lklingenberg Nybegynder
28. november 2003 - 01:30 #8
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
Avatar billede hardtimes Nybegynder
28. november 2003 - 01:52 #9
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.
Avatar billede lklingenberg Nybegynder
28. november 2003 - 02:01 #10
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
Avatar billede lklingenberg Nybegynder
28. november 2003 - 02:07 #11
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?
Avatar billede lklingenberg Nybegynder
28. november 2003 - 02:21 #12
Daffer i seng nu - kigger forbi i morgen. Sweet dreams ;-)
Avatar billede roger Nybegynder
28. november 2003 - 04:08 #13
lklingenberg --> Han SKAL netop replace i dette eksempel ellers vil man relativt nemt kunne logge ind uden at kende brugernavn og password.
Avatar billede hardtimes Nybegynder
28. november 2003 - 12:06 #14
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.
Avatar billede lklingenberg Nybegynder
28. november 2003 - 14:04 #15
-> 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?
Avatar billede lklingenberg Nybegynder
28. november 2003 - 14:06 #16
-> 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?
Avatar billede hardtimes Nybegynder
28. november 2003 - 14:07 #17
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.
Avatar billede roger Nybegynder
28. november 2003 - 18:01 #18
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 :)
Avatar billede inglenook Praktikant
28. november 2003 - 18:06 #19
bruger du frames ? det er et kendt problem at Session variabler ikke overfoeres korrekt i frames......
Avatar billede lklingenberg Nybegynder
28. november 2003 - 20:21 #20
-> 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?
Avatar billede roger Nybegynder
29. november 2003 - 01:21 #21
Nahh ikke lige på stående fod. Søg evt. på security,databaser,querystring osv.
Avatar billede hardtimes Nybegynder
01. december 2003 - 01:16 #22
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.
Avatar billede lklingenberg Nybegynder
01. december 2003 - 11:23 #23
ok - godt du fandt fejlen!
Avatar billede lklingenberg Nybegynder
01. december 2003 - 11:23 #24
jeg synes nu ikke du skal smide mig 200p!
Avatar billede hardtimes Nybegynder
01. december 2003 - 11:24 #25
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 :)
Avatar billede lklingenberg Nybegynder
01. december 2003 - 11:35 #26
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...
Avatar billede thesurfer Nybegynder
01. december 2003 - 13:02 #27
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..
Avatar billede hardtimes Nybegynder
01. december 2003 - 13:05 #28
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... :)
Avatar billede thesurfer Nybegynder
01. december 2003 - 13:09 #29
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 :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester