Avatar billede skov_p Praktikant
29. september 2004 - 19:37 Der 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

rs.close
set rs = nothing

'\\Response.Write(arrRecords(0,0))
'\\Response.Write(arrRecords(1,0))
username = Request.Form("username")
password = Request.Form("password")

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
%>
Avatar billede eagleeye Praktikant
29. september 2004 - 19:41 #1
Hvordan ser dit tjek ud?

Det skal laves sådan her:

if Session("LogIn") = "true" then
  'ok vis siden

else
  'ikke logget ind
Avatar billede eagleeye Praktikant
29. september 2004 - 19:41 #2
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
Avatar billede skov_p Praktikant
29. september 2004 - 19:50 #3
Nix, har jeg prøvet.

Mit tjek er som du har skrevet
Avatar billede eagleeye Praktikant
29. september 2004 - 19:57 #4
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:


<%

username = replace(Request.Form("username"),"'","")
password = replace(Request.Form("password"),"'","")

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
%>
Avatar billede eagleeye Praktikant
29. september 2004 - 20:01 #5
de to sidste linjer med con skulle vist ikke med :)
Avatar billede skov_p Praktikant
29. september 2004 - 20:24 #6
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.
Avatar billede eagleeye Praktikant
29. september 2004 - 20:28 #7
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 ""
Avatar billede skov_p Praktikant
29. september 2004 - 21:09 #8
Det er rigtigt.

Hvad gør jeg med min session :0(
Avatar billede eagleeye Praktikant
29. september 2004 - 21:14 #9
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
Avatar billede skov_p Praktikant
29. september 2004 - 21:17 #10
<%
check = Session("LogIn")
If NOT (check = "true") Then
response.Write("You are not logged in.")
response.End
End If
%>
Avatar billede skov_p Praktikant
29. september 2004 - 21:19 #11
Du kan selv prøve

http://80.166.128.244

User abc
Pwd 123
Avatar billede eagleeye Praktikant
29. september 2004 - 21:31 #12
Jeg kan godt logge ind. Hvis jeg ikke logger ind kommer: You are not logged in.
Men logger jeg ind kan jeg se et par billeder på siden hurgada
Avatar billede eagleeye Praktikant
29. september 2004 - 21:34 #13
hmm?? i IE kan den ikke, men i firefox vil den godt
Avatar billede skov_p Praktikant
29. september 2004 - 21:34 #14
Kan du trykke på Hurgada uden at have logget ind og derefter logge ind med succes?
Avatar billede skov_p Praktikant
29. september 2004 - 21:35 #15
Microsoft...
Avatar billede eagleeye Praktikant
29. september 2004 - 21:39 #16
jeg tror det et cache problem, hvis du prøver det du beskeriver 29/09-2004 21:34:40 og trykker F5 for at reload siden kommer billederne frem.
Avatar billede eagleeye Praktikant
29. september 2004 - 21:45 #17
du kan prøve at tilføje dette på de sider imellem <head> og </head>:

<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
Avatar billede skov_p Praktikant
29. september 2004 - 22:14 #18
Jeg er newbie i asp / HTML så hvor skal jeg sætte det ind?
Avatar billede eagleeye Praktikant
29. september 2004 - 22:16 #19
Eks:

<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>
Avatar billede skov_p Praktikant
29. september 2004 - 22:21 #20
Protected.inc udfører tjek

Det ser nu sådan ud:

<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>

<p><!--#include file="Protected.inc"--></p>
<%
sqlTable = "SELECT ImagePath, ImageText FROM Images"
'\\ connection til db
con = "ODBC_CON"
set rs = server.createobject("adodb.recordset")

rs.open sqlTable, con
%>
    <div align="left">
      <table border="1" width="100%">
<%
Do while (not rs.eof)%>
  <tr>
    <td width="35%"><img border="0" src=<%=rs("ImagePath")%>></td>
    <td width="65%"><%=rs("ImageText")%></td>
  </tr>
<%
rs.MoveNext
Loop
rs.close
%>
</table>
</div>
</body>
</html>
Avatar billede eagleeye Praktikant
29. september 2004 - 22:27 #21
Nu virker det da også.

Lige en ting. Brug aldrig .inc til kode da det kan downloades direkte i browseren:
http://80.166.128.244/Protected.inc  kilk og view soucre

Nu har du ikke nogle brugernavne eller password i filen så det ikke så slemt.

Så bruge altid endelsen .asp til kode filer:
<p><!--#include file="Protected.asp"--></p>
Avatar billede skov_p Praktikant
29. september 2004 - 22:45 #22
Kanon, jeg kom til at bruge et forkert brugernavn :o)
Hvad betyder de linier som vi tilføjede
Avatar billede eagleeye Praktikant
29. september 2004 - 22:51 #23
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.
Avatar billede eagleeye Praktikant
29. september 2004 - 22:54 #24
Det skulle hvade været et svar :)
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