03. maj 2002 - 01:07Der er
21 kommentarer og 1 løsning
sessions i asp script...
hejsa jeg er ved at lave en sektion på min hjemmeside med admin osv..
jeg har lavet add/slet brugere.. og login .. (brugernavne og passwords bliver hentet fra database)
nu var det jeg har hørt så meget om sessions..
fks. alle som er logged ind .. ska skrives på en onlineliste ,, og så skal webmaster,admin blive smidt ind på en side mens normale brugere på en anden,, og brugere som slet ik er logged ind ska bare se standard siden..
jeg har fulgt div. toturials,guides,faq's men jeg er åbenbart for dum :/
jeg ved det ska gøres med sessions.. og global.asa (efter hvad jeg har læst)
men jeg forstår simpelt hen minus...
hvis en af jer kan lave koden... eller give en rigtig god newbie forklaring så ville det være fedt..
da dette er det eneste jeg mangler til min side er jeg ville til at give gode points
altså kommer i med et eksempel eller en kode jeg kan få til at virke kan det være jeg bliver så glad jeg smider 100 eller flere points i puljen :)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
det der er med sessions er at når en bruger kommer ind på dit domæne bliver der automatisk oprettet en session
den session kan du få adgang til med ASP
Når en bruger så logger på kan du først checke om brugeren er en admin eller webmaster eller alm. bruger. du kan så sætte nogle værdier i hans/hendes session
IF bruger = "admin" THEN Session("admin") = "ja" ELSE Session("admin") = "nej" END IF
Her checkes der for at se om brugeren er admin eller ej... hvis han er så laver vi en session variable der admin og giver den en værdi.
Hvis du så som admin gerne vil ændre noget i admin området kan du checke på den/de sider om der finder en session der hedder Session("admin") = "ja" hvis der gør kan han få lov at bruge siden. hvis ikke, kan du smide brugeren hen til forside..
I bund og grund bruges bruge sessions mest til at gemme info om brugeren som du så kan bruge i din scripts.
Sessions kan ses og bruges på alle dine sider på sitet.
hvis du kommer med din kode som bruges til login kan jeg lige vise dig et par eksempler med sessions
Nu kan serveren genkende dig frem for alle de andre maskiner der besøger siden. Så hvis en side f.eks. vil se om du har logget på, så tjekker den om din session er i orden. sådan:
IF session("hvadsidderderpaalorte") = "" THEN response.write "Din slambert! Du er ikke logget ind!" END IF IF session("hvadsidderderpaalorte") = "fluer" THEN response.write "Herligt at se dig kære administrator" END IF
For at bruge dit login gør du bare således først i din fil:
IF request.form("password") = "det_rigtige_password" THEN session("hvadsidderderpaalorte") = "fluer" ELSE session("hvadsidderderpaalorte") = Nothing END IF
IF session("hvadsidderderpaalorte") = "" THEN response.write "Din slambert! Du er ikke logget ind!" END IF IF session("hvadsidderderpaalorte") = "fluer" THEN response.write "Herligt at se dig kære administrator" ' evt. noget med response.redirect til en admin-side. END IF
pointen er at du heletiden kan bestemme hvad en bruger skal se hvis han har sit sesion i orden eller ej.
Man kan f.eks også oprette flere grader af brugere session("type") = 1 session("type") = 2 session("type") = 3 osv..
<% ' Hvis der er blevet trykket på knappen "Login" If Request.Form("Action") = "Login" Then ' Her forberedes de indtastede værdier til validering strUID = Trim(Replace(Request.Form("Brugernavn"),"'","")) strPWD = Trim(Replace(Request.Form("Adgangskode"),"'",""))
' Hvis der er skrevet noget i både brugernavn og adgangskode If Len(strUID) > 0 And Len(strPWD) > 0 Then
' DSNLess forbindelse til databasen Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("dtabase.mdb")
' Opbygning af SQL streng strSQL = "SELECT UserID FROM Users"&_ " WHERE (Username = '" & strUID & "')"&_ " AND (Password = '" & strPWD & "')"
Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis brugeren fandtes i databasen intUID = rs("UserID") Else ' Hvis brugeren ikke fandtes i databasen strERR = "Du blev ikke godkendt af systemet" End If
' Rydder op i vores connection objekt myConn.Close Set myConn = Nothing
If Len(intUID) Then ' Hvis variablen intUID indeholder en værdi sættes denne i sessionen "UserID" og brugeren bliver sendt videre Session("UserID") = intUID Response.Redirect("main.asp") End If Else ' Hvis der ikke var angivet brugernavn og adgangskode strErr = "Du skal skrive både brugernavn og adgangskode" End If
If Len(strErr) > 0 Then ' Her laves fejlmeddelsen om til rød skrift strErr = "<p><font color=red>" & strErr & "</font></p>" End If End If %> <html><head> <title>Login script</title> </head><body> <form method="POST" action="login.asp"> <p><font size="2">Angiv brugernavn og adgangskode</font></p><%=strErr%> <table border="0"> <tr> <td width="50%">Brugernavn:</td> <td width="50%"><input type="text" name="Brugernavn" size="20"></td> </tr> <tr> <td width="50%">Adgangskode:</td> <td width="50%"><input type="password" name="Adgangskode" size="20"> </td> </tr> </table> <p><input type="submit" value="Login" name="Action"></p>
hvis jeg nu sætter IF request.form("password") = "det_rigtige_password" THEN session("hvadsidderderpaalorte") = "fluer" ELSE session("hvadsidderderpaalorte") = Nothing END IF
IF session("hvadsidderderpaalorte") = "" THEN response.write "Din slambert! Du er ikke logget ind!" END IF IF session("hvadsidderderpaalorte") = "fluer" THEN response.write "Herligt at se dig kære administrator" ' evt. noget med response.redirect til en admin-side. END IF ind i mit login så virker det ikke.. ?
Et par ting du skal være opmærksom på, når du arbejder med sessions:
Session_OnEnd (i global.asa) som køres når en session enten afsluttes explicit med session.abandon eller når den timer ud, er ikke garanteret til at køre altid. Det betyder at eks. en "online brugere" funktion, til tider vil vise for mange brugere. Jeg har læst flere (uvidenskabelige) analyser/tests, der alle påviser at Session_OnEnd kun kører i ca. 95% af alle tilfælde.
Session.SessionID er ikke garanteret unik på tværs af server genstart og du bør derfor aldrig bruge den som GUID i din database.
Mht. din kode, venligst vis hvordan den ser ud efter du har lavet dine rettelser...
Det er faktisk ikke så besværligt som du tror :-) Altså... Du bliver først og fremmest nødt til enten at have noget i databasen eller på siden der stiller et kriterie for hvornår man er guest, bruger eller administrator.
Lad mig foreslå et alternativt script som du selv kan redigere i efter eget ønske:
<% IF request.form("Action") <> "" THEN 'Hvis der er blevet submittet så kør resten af scriptet
Conn.Open DSN strSQL = "SELECT * FROM tabel where Brugernavn = '"& request.form("brugernavn") &"'" Set rs = Conn.Execute(strSQL)
IF rs.EOF THEN Response.write "Der findes ingen brugere med det valgte brugernavn!" ELSE DO WHILE NOT rs.EOF IF rs("Adganskode") = request.form("adganskode") THEN ' Brugernavn + pass passer sammen. IF request.form("Brugernavn") = "Administrator_navn1" OR request.form("Brugernavn") = "Administrator_navn2" THEN ' listen kan fortsættes session("usertype") = "Admin" ELSE IF request.form("Brugernavn") = "NormalBruger1" OR request.form("Brugernavn") = "NormalBruger2" THEN ' listen kan fortsættes session("usertype") = "Bruger" ELSE session("usertype") = "Guest" END IF END IF END IF rs.Movenext LOOP Response.write "Velkommen <b>"&request.form("brugernavn")&"</b>, du er logget ind i systemet som <b>"&session("usertype")&"</b>" END IF END IF
Du kan så selv indsætte de brugernavne i scriptet som du mener skal være admins eller hele brugere. Alle der ikke er anført som enten brugere eller admind, vil blive logget ind som guests.
DU kan også lave en database løsning hvor der står i databasen om din user er admin eller ej. På den måde kan du lettere lave en længere liste af brugere eller admins + det bliver lettere at tilføje sådan nogle senere. Jeg kan godt lave det til dig hvis du smider lidt flere point i :-)
Conn.Open DSN strSQL = "SELECT * FROM users where username = '"& request.form("username") &"'" Set rs = Conn.Execute(strSQL)
IF rs.EOF THEN Response.write "Der findes ingen brugere med det valgte brugernavn!" ELSE DO WHILE NOT rs.EOF IF rs("username") = request.form("password") THEN ' Brugernavn + pass passer sammen. IF request.form("username") = "emingos" OR request.form("username") = "invader" THEN ' listen kan fortsættes session("usertype") = "Admin" ELSE IF request.form("username") = "NormalBruger1" OR request.form("username") = "NormalBruger2" THEN ' listen kan fortsættes session("usertype") = "Bruger" ELSE session("usertype") = "Guest" END IF END IF END IF rs.Movenext LOOP Response.write "Velkommen <b>"&request.form("username")&"</b>, du er logget ind i systemet som <b>"&session("usertype")&"</b>" END IF END IF
Du skal da ikke bare stå der og grine.. GIV MIG SÅ DE POINTS!! Eller jeg var en en bjerg-nisse til at bede julle-manden om at undlade gaver til emingos.
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.