Avatar billede Slettet bruger
07. oktober 2007 - 19:27 Der er 14 kommentarer og
1 løsning

Problemer med at logge ud af og til

Hvad er problemet med dette logout script:

Session.Abandon
Response.Cookies("vdb_autologin")("username") = ""
Response.Cookies("vdb_autologin")("password") = ""
Response.Cookies("vdb_autologin")("autologin") = ""
Response.Cookies("vdb_autologin").Expires = Date-365

Det virker fint nok, men så lige pludselig så vil det ikke logge ud, så skal man slette cookies manuelt via browserens indstillinger og så virker det igen, og så lige pludselig så kommer problemet igen.

Hvad kan problemet være ?
Avatar billede w13 Novice
07. oktober 2007 - 19:49 #1
Hvordan tjekker du, om man er logget ind?

Muligvis viser siden bare den cachede indloggede side. Hvad hvis du i toppen af alle sider skriver:

<%Response.Expires=-1%>
Avatar billede Slettet bruger
07. oktober 2007 - 20:10 #2
Her er mit login script, og tjekker for det meste om Session("userid") er større end 0.

<%
If Session("userid") = "" OR Session("userid") = 0 Then

  If Request.Cookies("vdb_autologin")("autologin") = "yes" Then
    username = Request.Cookies("vdb_autologin")("username")
    password = Request.Cookies("vdb_autologin")("password")
  ElseIf Request.Form("login_username") > "" Then
    username = Request.Form("login_username")
    password = Request.Form("login_password")
  End If

  strSQL = "Select * from sys_users where usUsername='" & username & "' AND usPassword='" & password & "' AND usValid=true"
  Set rsLogin = ConnMain.Execute (strSQL)
  If not (rsLogin.EOF OR rsLogin.BOF) Then

    If rsLogin("usRole") >= SITE_VARIABLE_LOCKUSERLOGIN Then

      Session("userid") = rsLogin("usID")
      Session("userrole") = rsLogin("usRole")

      If Session("userrole") >= 9 Then
        Session("bypasslockdown") = true
      End If

      If rsLogin("usLastLogin") > "" Then
        Session("userlastlogin") = rsLogin("usLastLogin")
      Else
        Session("userlastlogin") = Now()
      End If

      loginSQL = "update sys_users set [usLastLogin]=Now() where usID=" & rsLogin("usID")
      ConnMain.Execute(loginSQL)

      Foldercheckuser rsLogin("usID")

      If Request.Form("login_autologin") <> "" OR Request.Cookies("vdb_autologin")("autologin") = "yes" Then
        Response.Cookies("vdb_autologin")("username") = username
        Response.Cookies("vdb_autologin")("password") = password
        Response.Cookies("vdb_autologin")("autologin") = "yes"
        Response.Cookies("vdb_autologin").Expires = Date+365
      End If

      Response.Redirect "?" & Request.Querystring

    Else

      Response.Redirect "?pa=main&msg=loginlocked"

    End If

    rsLogin.Close
    set rsLogin = Nothing

  Else

    Session("userid") = 0
    Session("userrole") = 0
    Session("usertheme") = 0

    Response.Cookies("vdb_autologin")("username") = ""
    Response.Cookies("vdb_autologin")("password") = ""
    Response.Cookies("vdb_autologin")("autologin") = ""
    Response.Cookies("vdb_autologin").Expires = Date-365

  End If

End If
%>
Avatar billede w13 Novice
07. oktober 2007 - 20:27 #3
Umiddelbart ville jeg stadig foreslå response.expires=-1
Avatar billede Slettet bruger
07. oktober 2007 - 20:31 #4
Okay, har sat den ind, men det hjalp ikke, hvad gør den lige ?
Avatar billede gammelhat Nybegynder
07. oktober 2007 - 20:31 #5
Jeg tror der ligger er par artikler omkring sql injetion, dem kan du får stor glæde af at læse, eller google lidt på emnet. Men det er et andet problem
Avatar billede Slettet bruger
07. oktober 2007 - 20:35 #6
Gammelhat >>> Er ikke helt med på hvad du mener det andet problem det er!?
Avatar billede gammelhat Nybegynder
07. oktober 2007 - 20:38 #7
Problemet er sql injektion. Du kontrollerer ikke brugerens input, så han kan manipulere med din sql forespørgsel. Det gør ham i stand til at lave alle mulige former for unoder, bl.a. logge ind som en anden bruger, uden kendskab til dennes password
Avatar billede Slettet bruger
07. oktober 2007 - 20:41 #8
Okay, det lyder ikke så godt, men hvor kan man finde forklaringer på hvordan man laver sådan noget rigtigt, det der sql injektion?
Avatar billede w13 Novice
07. oktober 2007 - 21:07 #9
Hvis du sætter response.expires=-1 på alle dine sider, så bliver de ikke gemt i cachen, og så kommer du ikke til at se gamle sider, f.eks. som om du er logget ind, når du ikke er.
Avatar billede w13 Novice
07. oktober 2007 - 21:13 #10
Ang. sql-injections: bl.a. må du ikke tillade brugeren at indtaste ' og "

Du kan undgå det med replace:

Replace(Replace(strUsername,"'","&#39;"),"""","&quot;")

Eller mere overskueligt:

strUsername=Replace(strUsername,"'","&#39;")
strUsername=Replace(strUsername,"""","&quot;")
Avatar billede Slettet bruger
08. oktober 2007 - 12:03 #11
Istedet for at bruge din replace, har jeg sat en funktion ind, så man kun kan oprette en bruger/logge ind, hvis bruger og kode er rene tal og/eller bogstaver.

Jeg køre også med din response.expires=-1 nu, men jeg tror ikke det er det der er problemet, jeg tror ikke at den sletter cookies og derfor bliver den ved men at logge ind fordi der findes cookies for en aktiv bruger.
Avatar billede w13 Novice
08. oktober 2007 - 13:23 #12
Så prøv at response.write noget på skærmen lige efter sletning af cookies, så vi ser, om den kører den del.
Avatar billede Slettet bruger
08. oktober 2007 - 14:04 #13
Jeg tror den udføre scriptet, for den kommer ikke med fejl eller noget, hvis jeg sætter noget tekst ind lige efter sletning.
Er lige kommet itanke om noget, med ikke helt om dette har nogen betydning, men det site jeg har problemer med ligger på et subdomæne og login/logout er en kopi af det script der ligger på hoveddomænet, dvs. Response.Cookies("vdb_autologin")("username") osv., hedder det samme på begge sider, kan det være muligt at den kan bruge cookie fra hoveddomæne på subdomæne, men at den ikke kan få lov at slette den?
Avatar billede Slettet bruger
09. oktober 2007 - 14:46 #14
Nå, men indtil nu ser det ud til at det virker, så hvis i begge vil lægge et svar så deler jeg point mellem jer, da i begge har hjulpet med forbedringen af min side.
Avatar billede w13 Novice
09. oktober 2007 - 14:50 #15
Ok. =)
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