10. juli 2002 - 09:21Der er
17 kommentarer og 1 løsning
Global ASA
når en bruger logger ind på min side puttes hans brugernavn i en variabel USERName.
Hvordan kan jeg via Global.asa checke om han er logget ind flere gange - (underforstået han har givet sit password til flere ikke registrerede bruger).
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.
når man logger ind ville jeg have en eller anden rutine der lige checker om brugernavnet allerede findes. men jeg ved ikke rigtigt hvordan det skal gøres, det jeg ved er at det nok skal klares via global.asa.
Du kan ikke gøre det alene via global.asa. Når en bruger logger ind, vil jeg tage hans brugernavn og smide ind i en database eller tekstfil, når han logger ud igen skal han så fjernes igen. Når han logger på, kan du så tjekke om hans navn er på listen af folk der er logget ind. Det vil give nogle problemer, hvis han logger af, og så prøver at logge på igen, jeg kan ikke huske hvor hurtigt session onend fungerer.
problemet er bare at hvis jeg gør som ras2000 forslår vil jeg ganske sikkert få problemer for de fleste logger ud ved bare at lukke siden eller hoppe et andet sted hen.
Nå, det gik ikke helt så godt som jeg havde regnet med. Det skulle være muligt at definere en array i sin global.asa, og udvide/fjerne i den, men jeg har ikke kunne få det til at fungere. Jeg kigger lidt mere på det, men jeg er ikke så fortrøstningsfuld længere.
Nå, jeg har ramt muren. Her er min global.asa indtil videre: <SCRIPT LANGUAGE="VBScript" RUNAT="SERVER"> Sub Session_OnStart Users = Application("Users") ReDim Preserve Users(UBound(Users) + 1) Users(2) = UBound(Users) + 1 Application("Users") = Users Session("a") = Users(2) End Sub
Sub Session_OnEnd End Sub
sub Application_OnStart ReDim Users(1) Application("Users") = Users End Sub
sub Application_OnEnd End Sub </script> Den laver et array, og føjer en post til. Jeg mener det burde være muligt at få en asp-side til at skrive bruger navnet ind i den array, og kontrollere om det var der i forvejen, men jeg kan ikke gennemskue hvordan. Jeg lider selvfølgelig en del af at jeg er vant til at scripte client-side, og det er vi jo langt fra her. Det skulle jo også være muligt at få den til at fjerne posten igen ved session onend, men igen kan jeg ikke se hvordan. En mulighed jeg tænkte på, var at udvide arrayet i det uendlige, og gemme positionen af brugeren i arrayet, og så bare slette navnet. Det ville kunne lade sig gøre, men det dur jo ikke i praksis med et array der bliver uendeligt stort. Der skal vist en dygtigere person ind i billedet end mig. Håber det lykkes dig.
Jeg tror jeg har fundet ud af det. Nu ser min global.asa således ud: <SCRIPT LANGUAGE="VBScript" RUNAT="SERVER"> Sub Session_OnStart Session("lillestreng") = "" End Sub
Sub Session_OnEnd Application("brugerstreng") = replace(Application("brugerstreng"), "&" & Session("lillestreng"), "") Session("lillestreng").close End Sub
sub Application_OnStart Application("brugerstreng") = "" End Sub
sub Application_OnEnd Application("brugerstreng") = "" End Sub </script> Det der er tanken er at brugerne bliver føjet til i en lang tekststreng, når de logger på, og så fjernet igen, når de logger ud igen. Der er lidt knas, Session_OnEnd fyrer ikke når man forlader sitet, som jeg troede, men når serveren har besluttet at du ikke er aktiv mere, dvs typisk tyve minutter efter din sidste forespørgsel. Det er for lang tid, det gider vi ikke vente på, så du kan fyre den af manuel (uha det lød frækt) med en Session.Abandon. Problemet er hvornår det skal gøres. Mit forslag går på at du laver det hele i frames. Den ene frame er skjult, og dens eneste funktion er, at når den onloader, så åbner den en side der hedder logud.asp, feks, som så indeholder session.abandon, og en self.close., altså: <html> <head> </head> <body onload="self.close()"> <% Session.Abandon %> </body> </html> Din login side skal så tjekke om Instr(application("brugerstreng"), brugernavn) <> 0. Min ser således ud: <html> <head> </head> <body> <% Session("lillestreng") = Request.querystring("bruger") if instr(Application("brugerstreng"), Session("lillestreng")) = 0 then Application("brugerstreng") = Application("brugerstreng") & "&" & Session("lillestreng") response.write Replace(Application("brugerstreng"), "&", " ") else response.write "Du må ikke være logget på to gange på samme tid" end if %> </body>
Jeg har lavet noget her: http://www.mucdesign.dk/logon/index.htm Prøv dig lidt frem med det. Jeg har ikke lavet en submit knap, bare tryk enter. Så skulle du komme til en side med en tekststreng af alle dem der er logget på. Når du lukker den side igen, så fjerner den brugeren fra tekststrengen igen. Men jeg tror man er nød til at gøre det fra forskellige maskiner, der er vist mange ting jeg ikke ved om global.asa filen.
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.