29. september 2004 - 19:37Der er
23 kommentarer og 1 løsning
Kan ikke ændre oplysninger for session
Hej
Jeg har en asp side hvor hvor jeg gemmer login information i en session. Klikker jeg på et link til en side der kræver login får jeg at vide at jeg skal logge ind. Men selv om jeg logger ind får jeg stadig ikke lov til at se siden. Hvis jeg starter med at logge ind kan jeg godt se siden men vælger jeg at logge ind igen med et ugyldig bruger id kan jeg stadig se siden. Kan man ikke opdatere/overskrive oplysninger i en session.
<% sqlTable = "SELECT user, password FROM login"
'\\ connection til db con = "ODBC_CON" set rs = server.createobject("adodb.recordset") rs.open sqlTable, con
if not rs.eof then arrRecords = rs.getrows() end if
If (arrRecords(0,0) <> username OR arrRecords(1,0) <> password) Then Session("LogIn") = "false" Response.Write("Sorry, incorrect username and password") Response.Redirect "default.asp" Response.End Else Session("LogIn") = "true" Session.Timeout = 30 End If %>
Du kan prøve også at tilføje session.abondon før redirect så session nedlægges:
If (arrRecords(0,0) <> username OR arrRecords(1,0) <> password) Then Session("LogIn") = "false" session.Abandon Response.Write("Sorry, incorrect username and password") Response.Redirect "default.asp" Response.End Else Session("LogIn") = "true" Session.Timeout = 30 End If
Noget helt andet er dit login system vil kun virker hvis du har en bruger i din database.
Du skal loopen igenne arrayeret og tjekke om en bruger er fundet eller ikke er fundet. Den bedste løsning vil nu være at lade databasen tjekke om brugeren findes ved at udvide din SQL så den tjekker user og password. Sådan her:
sqlTable = "SELECT user, password FROM login WHERE user='" & username & "' AND [password]='" & password & "'"
'\\ connection til db con = "ODBC_CON" set rs = server.createobject("adodb.recordset") rs.open sqlTable, con
if not rs.eof then Session("LogIn") = "true" Session.Timeout = 30 Else Session("LogIn") = "false" session.Abandon Response.Write("Sorry, incorrect username and password") Response.Redirect "default.asp" Response.End End If
rs.close set rs = nothing Con.Close Set Con=nothing %>
Hvis jeg vil have mere end et bruger id kan den bruges, der er bare en enkelt hage. Med bruger og password i SQL sætningen er det muligt at logge ind med et tilfældig brugernavn og password Bruger XXX Password XXX' OR ''=' Det vil i dit eksempel give ...WHERE password = 'XXX' OR ''='' ''='' er altid true og der vil blive returneret et recordset.
Nej det er ikke muligt som jeg har lavet det. Man skal bare huske at enten fjerne ' eller replace en ' med to ''. Som har ist det fjernes ' ved at replace ' med ""
Det straks være. Det ved jeg faktisk ikke, hvis det sidste ikke løser det. Og din if sætning så sådan her ud med " omkring true?: if Session("LogIn") = "true" then
<html> <head> <META Http-Equiv="Cache-Control" Content="no-cache"> <META Http-Equiv="Pragma" Content="no-cache"> <META Http-Equiv="Expires" Content="0"> </head> <body> <% check = Session("LogIn") If NOT (check = "true") Then response.Write("You are not logged in.") response.End End If %> .. billederne her </body> </html>
<p><!--#include file="Protected.inc"--></p> <% sqlTable = "SELECT ImagePath, ImageText FROM Images" '\\ connection til db con = "ODBC_CON" set rs = server.createobject("adodb.recordset")
De to første betyder at siden ikke skal caches og den skal hentes siden på servren igen. Den sidste i pricippet noget i samme stil. Når siden er cached kan man med expires sætte hvornår browseren skal tjekke for en ny side.
I browseren kan man få den til at cache siden for at spare båndbrede, og din side blev åbenbart cached.
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.