09. februar 2003 - 11:46Der er
18 kommentarer og 1 løsning
Auto udlogning
Hejsa...
Jeg har brug for et Java-Script til min hjemmeside, som automatisk logger en bruger af, hvis brugeren lukker det pågældende vindue. Selv aflognings handlingen sker i et asp script, som jeg selv har lavet. Men jeg mangler et JavaScript som henter den hvor dette aflognings script ligger på, altså når brugeren lukker vinduet...
På forhånd tak!
Venlig Hilsen Hjalte M. Larsen mail: Hjalte-ml@ofir.dk
onbeforeunload="window.open('dinside.asp')" husk at lave vinduet lille, og evt. vise det uden for skærmen. Nå du så har lavet dit DB stuff i filen dinside.asp kører du en self.close()
derved lukker dit vindut. problemet er at når folk trykker F5 for at opdatere vil den køre dette script.
Hvis din specielle side gør noget vigtigt, er det altså en rigtig dårlig idé at indbygge i systemet at den skal kaldes, når man lukker vinduet. Du får problemer ved at følge den idé.
Der er masser af situationer hvor din side alligevel ikke vil blive kaldt. Det er langt sikrere at lave en timeout.
Ja der er mange ting der kan gøre den ikke bliver kaldt.
Der findes ikke en skudsikker måde, at lave det på. Men det er et velkendt problem. Se bare alle de chat-systemer du kender!
Der popper tit et vindue op når du lukker dem.
Men problemet ved ASP/javascript i modsægning til applikationer (java , c++) programmer er at de er session-baseret.
man kan sige at applikationer altid en direkte forbindelse, og vil altid vide når klienten er lukket ned.
Men med HTML har du ikke denne forbindelse.
Du kan dog efterligne det ved at fx lave hele dit system i frames.
Du skal så ha en usynlig frame der med mellemrum kontaker en ASP-side (fx ved hjælp af XML-HTTP objektet eller remote scriptingt). Når siden kaldes vil din asp side opdatere hvornår den sidste er blevet kaldt.
Derud over skal du have et fx VB script der kører på din server, og checker om intervallet er blever for stort, siden sidste opdatering. Hvis det er skal den køre dit ASP script. (den skal selvfølgelig vide hvilken bruger asp-scriptet skal køre for, men det er op til frame-siden at levere de oplysninger)
Det er bliver rimelig omstændigt at gøre det sådan.
"Men problemet ved ASP/javascript i modsægning til applikationer (java , c++) programmer er at de er session-baseret. man kan sige at applikationer altid en direkte forbindelse, og vil altid vide når klienten er lukket ned."
Det passer altså ikke. I f. eks. ASP er der en timeout fuldstændig som du selv ville have implementeret den. Den eneste forskel er at det er en facilitet som systemet tilbyder dig.
Hvis der skal laves noget oprydning er timeout faktisk den eneste sikre vej - koblet med et script der laver oprydning med faste intervaller, som du nævner ovenfor. Det er ikke elegant, men det er den eneste sikre metode
Man kan faktisk ikke vide hvornår en bruger er holdt op med at bruge ens side. Der er sjælent nogen direkte forbindelse imellem webserveren og klienten, når brugeren surfer rundt (med keepalive i HTTP er der, men den kan blive lukket på vilkårlige tidspunkter) og i princippet kan brugeren jo bare trykke på sin reset-knap på computeren (eller den går ned eller brugerens linie til nettet svigter), hvilket vil forhindre klienten i at sende besked om at den ikke længere bruger systemet.
Derfor er den eneste sikre metode til at få hægtet folk af systemet at benytte timeout. Her lagrer man brugernes sessioner i en tabel med et timestamp for det sidste tidspunkt de hentede noget. En gang hvert minut (eller måske mindre ofte afhængigt af applikationens art) kører man så et script som rydder op efter sessioner, der er timet ud (hvor timestampet er over x minutter gammelt).
Alt dette håndteres automatisk i ASP af sessionsvariable. PHP har noget tilsvarende.
Konsekvensen er at visse brugere en gang imellem oplever at blive logget ud, fordi at de har brugt lang tid på at kigge på en side, men man er sikker på at få ryddet ordentligt op efter folk.
Hvis det er ekstremt vigtigt at folk ikke bliver smidt af i utide, kan man have et lille billede eller noget indhold i en frame som reloader en gang imellem.
Det er noget værre snask, men timeouts er den eneste måde at vide hvornår folk er "holdt op" med at surfe på ens system.
En anden model er at lagre alle sessionsrelaterede oplysninger i cookies på folks browser. I så fald slipper man helt for at skulle lave timeout-scripts, for man behøver ikek at vide hvornår folk er holdt op med at bruge systemet. Dette kaldes iøvrigt for stateless serving i modsætning til alt det andet ovenfor som er statefull serving.
Synes godt om
Slettet bruger
12. februar 2003 - 00:28#15
Darkstar>>> Hvordan ville du lave sådan en timeout? Jeg kan ikke umiddelbart, så hvordan den skulle fungere
hjalte-ml>>> Jeg er lige flyttet og har ikke rigtig adgang til nettet i længere tid, så jeg når ikke at svare dig lige nu. Beklager.
Synes godt om
Slettet bruger
26. marts 2003 - 14:01#19
//
Synes godt om
Ny brugerNybegynder
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.