23. januar 2004 - 00:45Der er
20 kommentarer og 1 løsning
Lukning af side usynligt.
Hej Java gutter :)
Jeg har et problem med at jeg skal køre et script i php, når der bliver browset hen på en ny side eller når en bruger lukker sin browser helt jeg ville gerne havde hvis dette kunne foregå usynligt, det drejer sig om en fil logout.php den skal køre uden der ses noget, håber i kan hjælpe mig.! 100 point ;)
Jeg går ud fra at du anvender variabler til at checke hvem der er online (fx. var LoggedIn = 1), og ikke en post i din DB.
Hvis du anvender en variabel, burde du kunne klare det på følgende måde:
Følgende kode logger ud for dig: <script language="javascript"> function Disconnect() { var LoggedIn = 0 } </script>
Følgende kode bruges til at udføre logout'et: <body onunload="java script:Disconnect()">
Bare indsæt de to koder på din side, helst i banneret hvis du anvender et sådan, da koden skal være tilgængelig for at det virker. Hvis du anvender frames er det smartest at placere den i din index.php eller default.php
sr >> meningen er jo at logout.php skal kaldes for at ødelægge sessionen -- derfor bliver det jo ikke styrret af en javascript-variabel --- din kode antager også at variablen LoggedIn ikke eksisterer i forvejen, da du så at sige genopretter den ved at sætte "var" foran...
Ikke for at bitch'e (*S*) men jeg tror næppe at din kode kan bruges :-)
Præcis den der kode er ikk så brugbar, da det er et felt i min sql db "online" 1/0 altså når man logger ind så udfører den jo den kommando, at den sættes til 1 og når man bruger logout, så sættes feltet tilbage til 0 :D og så er det jo et lille JS ville være dejligt til at kører dette uden nogn probs, kunne bearhugx evt lave det med 1x1 px ? :Pda en alert ikk er så najz :P
jeg vil lige advare imod det med 1x1 window der popper op og forsvinder... der er mange (mig selv incl) som kører med popup-killers, og de forhindrer dette i at virke. De bruger tilsvarende på netdate.dk, og der kommer popop'en ikke ved mig (og TAK for det lol! Hader popups, ligemeget om det er til logout!)
Nu er det jo så ikke for at rakke ned på din opsætning mht login, men det gør det lidt sværere at logge ud automatisk når du anvender et DB felt til det...
Løsningen bliver, i dit tilfælde, at kalde et asp-script med en js kommando... Har aldrig selv fået det til at virke 100%...
Men kan da godt prøve igen igen... Hvis du bare lige vil hive dit DB-access-script (sql) herind, så kan jeg godt prøve at kigge på lidt på det...
Tror dog umiddelbart, at løsningen bliver noget med at du skal indsætte din alm. logout kode i følgende script:
// Script start //
<script language="javascript"> function LogUdAutomatisk() { document.write(Her_Skal_Du_Så_Indsætte_Koden); } </script>
<body onunload="java script:LogUdAutomatisk()">
// Script slut //
Det virker måske, men er ikke helt sikker da det er nogle år siden at jeg sidst har leget med asp...
Derudover får du ikke noget ud af at skrive til dokumentet med document.write() - husk på at det er onunload-eventen ... browseren er faktisk er i fuld gang med at lukke hele molevitten ned - og det betyder også at nyindskreven kode ikke når at blive parset igen...
Jeg citerer lige så: "Det virker måske, men er ikke helt sikker da det er nogle år siden at jeg sidst har leget med asp..."
OG
"... men det gør det lidt sværere at logge ud automatisk når du anvender et DB felt til det..."
Og kan jo lige citere det som du lige har skrevet: "... browseren er faktisk er i fuld gang med at lukke hele molevitten ned - og det betyder også at nyindskreven kode ikke når at blive parset igen..."
Så derfor siger jeg det lige igen... Brug en variabel til at tjekke for hvem der er online og hvem der ikke er... På den måde er det hele client side, og man slipper for en masse bøvl... Og hvis man gerne vil sikre sig imod at nogen selv sætter variablen først, og så bagefter går ind på siden uden egentlig at være logget ind, kan man jo bare kalde "LoggedIn = 1" og " LoggedIn = 0" fra et eksternt js...
Hvem skulle man så være logget ind som, hvis man ordner det hele klient-side
jeg tror nok at der er en mening med at det skal se serverside * sikkerhed * tilgængligheden af ressourcer
at JS-variablen loggedIn kan sættes - uafhængigt af sidens kontrolstrukturer - (og det kan den) gør at der ikke er nogen sikkerhed i det overhovedet - og derved vil det være irrelevant om man er logget ind eller ej
Ok... Tror at du læser det bare en anelse forkert...
Vi er enige om at alt hvad der sker client-side KUN sker for den pågældende bruger, og ikke for andre... Med så langt???
Ved at sætte en variabel client-side, er det KUN for den ene bruger at variablen bliver sat, og at alle andre også kan få sat denne variabel, client-side... Stadig med???
Hvis variablen er sat til fx. "1", så får man adgang til det der kræver et login. Hvis den er sat andet end "1" får man ikke adgang...
Her er et lille eksempel på en kode som tjekker for den variabel (Koden indsættes øverst i alle doks som skal kræve et login):
<% if LoggedIn<=0 then response.write(Du er ikke logget ind.) end if %>
Når man så logger ind, sættes "LoggedIn=Den_ID_Som_Den_Pågældene_Bruger_Har_I_Databasen", og ved logoff sættes den til "LoggedIn=0"... Kan du følge mig???
Når der så skal tjekkes for hvem den pågældene bruger er, bruger man følgende (er ikke helt sikker på koden): SQL = "SELECT * FROM Database WHERE ID="&LoggedIn&""
Er du stået helt af, eller hænger du stadig på???
Det med sikkerheden kan ordnes ved hjælp af lidt JS:
// script start //
<script language="javascript"> function TjekForLoggedIn() { if(isNaN(LoggedIn)=="true") { var LoggedIn = 0 } else { var LoggedIn = 0 } } </script>
<body onload="java script:TjekForLoggedIn()">
// script slut //
Ved brug af ovenstående, er man sikker på at variablen LoggedIn ikke kan ændres udefra...
Hvis du stadig er med, så er det godt... Hvis ikke, så lad være med at brokke dig, da jeg ved at mit system virker eftersom jeg selv har brugt det tidligere... Ingen brok, men spørg istedet...
Det skal så lige nævnes, at JS'et skal indsættes på en side der IKKE bliver reloadet på noget tidspunkt, derfor en god idé at køre med rammer, og så have koden til at stå i default.??? eller index.???
*LOL* Kan godt lide dine "fatter du det snart, eller burde du ikke være ude og lege med de andre børn istedet"-agtige kommentaer... De fortæller en masse - men ikke om mine mangel på kompetencer...
Din kode vil ikke virke - og den vil især ikke løse asdf's problem (som vi måske burde føre diskusionen tilbage til :-)
Hvis du vil have en minutiøs forklaring på, hvorfor din kode ikke vil virke, så sig til - men ellers så vil jeg vende min opmærksomhed væk fra dig og kode, som alligevel ikke virker, baseret på koncepter, som ikke har relevans for det pågældende spørgsmål...
Beklager de måske lidt giftige kommentarer, men bliver lidt pissed når nogen siger at noget jeg har før har fået til at virke uden probs ikke virker alligevel...
Men du har jo nok ret i, at emnet her ikke er en "verbal" mudderkastningskonkurrence, men derimod et forsøg på at løse de probs som asdf har...
Vil dog bare lige som en slutkommentar tilføje, at jeg stadig mener asdf's "online"-felt vanskeliggører det hele en hel del... For som du selv siger: husk på at det er onunload-eventen ... browseren er faktisk er i fuld gang med at lukke hele molevitten ned - og det betyder også at nyindskreven kode ikke når at blive parset igen...
Eller med andre ord: Når en bruger lukker browseren, forsvinder forb. til serveren, og eneste mulighed er clientside, eller et serverbaseret script (sikkert en java-applet) som tjekker for hvem der logger på og af...
Intet virker åbenbart med php i java... :[ som jeg ville have det til... men hvis folk har "point følerne" ude så skriv lige inden i aften så ska i nok få lidt points ;)
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.