Avatar billede Slettet bruger
09. februar 2003 - 11:46 Der 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
Avatar billede Slettet bruger
09. februar 2003 - 11:47 #1
Jeg fik ikke lige skrevet med at vinduet med aspscriptet, skal lukkers nå handlingen har fundet sted....

/Hjalte
Avatar billede _darkstar_ Nybegynder
09. februar 2003 - 15:22 #2
Normalt sætter man bare en timeout, så hvis brugeren ikke har været aktiv i x minutter, skal vedkommende logge ind igen. Kan det ikke bruges?
Avatar billede Slettet bruger
09. februar 2003 - 23:56 #3
Nej, det kan ikke bruges...
Avatar billede _darkstar_ Nybegynder
09. februar 2003 - 23:58 #4
Hvorfor?
Avatar billede Slettet bruger
10. februar 2003 - 11:46 #5
Jeg skal bruge et java script, som henter en speciel side, når vinduet lukkes...noget ligende det her:

<SCRIPT language=Javascript>
<!--
var exit=true;
function exitcnsl()
{
if (exit)
open("logaf.asp","new_window");
}
//-->
</SCRIPT>

Det henter bare også logaf hvis du skifter side, eller opdatere din browser.
Avatar billede _darkstar_ Nybegynder
10. februar 2003 - 12:00 #6
Det besvarer ikke mit spørgsmål. Hvorfor kan du ikke bruge timeout-tingen?
Avatar billede zaknafein Praktikant
10. februar 2003 - 16:06 #7
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.
Avatar billede _darkstar_ Nybegynder
10. februar 2003 - 16:09 #8
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.
Avatar billede zaknafein Praktikant
10. februar 2003 - 16:17 #9
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 hvad skal sit ASP-script gøre???
Avatar billede _darkstar_ Nybegynder
10. februar 2003 - 16:29 #10
zaknafein>>>Du skriver:

"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
Avatar billede zaknafein Praktikant
11. februar 2003 - 08:48 #11
darkstar_ ->  Hvor skal den timeout placeres mener du?
På klienten?
Avatar billede _darkstar_ Nybegynder
11. februar 2003 - 09:29 #12
zaknafein>>> Timeout skal anbringes i noget kode på serveren. Man kan ikke regne med at klienten gør som den skal.
Avatar billede zaknafein Praktikant
11. februar 2003 - 09:31 #13
nej det var det jeg undrede mig over, hvis den skulle.
Men hvordan vil su sammenholde en bestemt klient med serveren i dette timeout script?

Hvis man skal vide hvem der ikker er på mere?
Hvordan skal det timeout script, vide om en bestemt klient ikke browser mere?
Avatar billede _darkstar_ Nybegynder
11. februar 2003 - 10:11 #14
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.
Avatar billede 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
Avatar billede _darkstar_ Nybegynder
12. februar 2003 - 09:17 #16
Det kommer an på hvad for system du benytter. Er dt ASP, PHP eller noget helt tredie?
Avatar billede Slettet bruger
19. februar 2003 - 16:17 #17
Asp, jeg forstår bare ikke hvordan du vil lave et timeout system. Ved hjælp af sessions? Cookies?
Avatar billede _darkstar_ Nybegynder
21. februar 2003 - 12:08 #18
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.
Avatar billede Slettet bruger
26. marts 2003 - 14:01 #19
//
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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