Avatar billede walkie84 Nybegynder
24. april 2005 - 12:48 Der er 28 kommentarer og
1 løsning

funktion ved luk af vindue

HVordan får man en side til at udføre nogle ting, når en bruger lukker vinduet?
Avatar billede dennismp Nybegynder
24. april 2005 - 12:52 #1
Det kan du ikke. PHP udføres på serveren og serveren aner ikke hvad der foregår i brugerens browser.

Det du kan gøre er at gemme hvornår du sidst har set ham og så tjekke om det er "længe siden" - og så evt udføre det du har brug for.

Alternativt kan du se på noget javascript - men deter ingen garanti - og det har intet med php at gøre :)
Avatar billede busschou Praktikant
24. april 2005 - 12:53 #2
nu er jeg ikke php haj
Men i asp har man jo en global.asa fil hvor man kan udføre kode når sessionen slutter
Og det gør den jo når vinduet lukkes
Måske noget tilsvarende findes i php?
Avatar billede dennismp Nybegynder
24. april 2005 - 12:58 #3
Man kan skrive sin egen session-handler, og så lade den gøre noget bestemt når der udføres en garbagecollection of gamle sessions.

Men uden at fornærme walkie84, så tror jeg ikke det vil være en løsning han vil kaste sig ud i - (det er lidt omstændigt at debugge hvis skidtet ikke virker)
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:07 #4
ja ok, garbagecollection skal jeg nok ikke rodde mig ud i.. hvad med noget javascript?? kan det ikke gøre det? en eller anden form for event?
Avatar billede dennismp Nybegynder
24. april 2005 - 13:10 #5
Det kan du sikkert. Du skal bare være opmærksom på at du ikke er sikret at det bliver kaldt (hvis folk har slået javascript fra, fx). Men prøv og stille spørgsmålet i javascript gruppen - det ved de mere om :)
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:11 #6
ok, tak dennis.. skriv et svar.. :)
Avatar billede busschou Praktikant
24. april 2005 - 13:13 #7
Det kan du ikke!
Meningen med at lukke et vindue er at alt lukkes..så javascript kan ikke fange den event
Tænk hvis den kunne
Så hver gang man lukkede et vindue popede et nyt op osv osv...ikke sjov tanke ;o)
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:14 #8
ja det er sandt.. bare fordi jeg har lavet et community.. og hvis folk ikke logger ud selv, så står de som online selvom de lukker vinduet ned..
men så må jeg jo sætte noget tid på en session.. eller hvad er det nemmeste?
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:16 #9
hmm, kan man ikke få en popup besked når man prøver at lukke vinduet?
Avatar billede busschou Praktikant
24. april 2005 - 13:16 #10
Ja det er et evigt dilemma
Det nemmeste er nok at sætte sessionen til at udløbe efter et stykke tid og så finde sig i brugeren står aktiv så længe
Avatar billede dennismp Nybegynder
24. april 2005 - 13:17 #11
busschou; Der tror jeg du tager fejl. Du kan da snildt lave en onUnload i body.

prøv fx her: http://www.codetoad.com/javascript/miscellaneous/onunload_event_eg.asp (virker fint i ff)

Og ja, folk har misbrugt det - på TGP'er og fake-sider.

walkie84; Du har ikke fået svar på dit spørgsmål, så tag du dem bare selv :)
Avatar billede busschou Praktikant
24. april 2005 - 13:17 #12
prøv søg i javascript kategorien...mener der er masser af spørgsmål omkring events når der lukkes. Og alle dem jeg har set siger det ikke er muligt. Det virker også logisk nok på mig
Avatar billede busschou Praktikant
24. april 2005 - 13:19 #13
Det var kattens.. så tager jeg det i mig igen..
Synes det er noget hø at det kan gøres...men hvad
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:20 #14
:P
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:20 #15
mange tak.. du kan nu sagtens få de point hvis du vil dennis.. jeg har masser af dem.
Avatar billede busschou Praktikant
24. april 2005 - 13:27 #16
Men kan det virke til andet en end alert?
Man kan jo fx ikke lave en <body onunload"return confirm('vil du lukke?');">
For vinduet er allerede lukket når man klikker cancel
Avatar billede busschou Praktikant
24. april 2005 - 13:29 #17
Og som en skriver på linket skal du være opmærksom på at "boksen" dukker op når man klikker F5
Så hvis du vil bruge det til at sætte en bruger offline
Ja så skal brugeren blot trykke F5 ..så er vedkommende offline :/
Avatar billede dennismp Nybegynder
24. april 2005 - 13:30 #18
busschou; Dér er vi så enig :)

Som udgangspunkt antager jeg at javascript ikke virker, og sitet bør jo virke selvom brugeren ikke har javascript enablet. (Det er så også grunden til at jeg aldrig har sat mig ind i det - hvilket nok er en fejl).

walkie; Nu har du da fået et svar :)
Avatar billede busschou Praktikant
24. april 2005 - 13:34 #19
I forhold til hvordan den håndterer onunload eventen...så synes jeg det er noget hø
1) som dennismp siger hvad med brugere som ikke har javascript aktiveret
2) Hvad når brugeren trykker F5 , ryger han ud, eller skifter hans status blot til offline selvom han er online
3) Kan man overhovedet køre en funktion som retter i databasen når den event kaldes..for da er vinduet lukket og funktionen væk
Avatar billede dennismp Nybegynder
24. april 2005 - 13:39 #20
til 2) Han skal jo blot skifte side. Så med mindre man bruger frames, så skal man tage højde for det. Spørgsmålet er bare ikke om det er for besværligt iforhold til hvad man opnår.
Avatar billede walkie84 Nybegynder
24. april 2005 - 13:53 #21
jeg har også droppet den javascript funktion.. som du siger busschou, så kan den ikke rette i min db..
jeg må tilføje noget tidspunkt for login, også sætte på at brugeren er logget på x antal minutter derefter.. :/

man kan heller ikke chekke om en person er inaktiv på sitet vel?
Avatar billede dennismp Nybegynder
24. april 2005 - 13:55 #22
Du kan gemme "sidst set" hver gang han henter en side. Så hvis han ikke har hentet een side i 30 mins (eller hvad man nu vælger), så antager man han er logget ud.
Avatar billede busschou Praktikant
24. april 2005 - 13:55 #23
ja det ville nok være en smart, nem, acceptabel løsning :o)
Avatar billede walkie84 Nybegynder
24. april 2005 - 14:04 #24
ja, det lyder egentligt smart.. jeg kan sagtens forstå princippet i det, men vil du være flink og lige hjælpe mig igang?
Avatar billede dennismp Nybegynder
24. april 2005 - 14:24 #25
Hvad skal der udføres når folk bliver "logget ud" ?
Avatar billede walkie84 Nybegynder
24. april 2005 - 14:32 #26
nogle sessions skal 'unset'
Avatar billede walkie84 Nybegynder
24. april 2005 - 14:33 #27
eller, nej.. ikke sessions.. det er bare et felt i min sql som skal updateres..
Avatar billede walkie84 Nybegynder
24. april 2005 - 14:33 #28
jeg er nød til at smutte nu, men kommer igen senere.. håber du vil hjælpe :)
Avatar billede dennismp Nybegynder
24. april 2005 - 14:45 #29
tilføj et last_seen felt til din bruger-tabel, den må gerne være null. I hver URL opdaterer du så dette felt til now().

Du kan så, lave et script, der kigger bruger-tabellen igennem og tjekker og last_seen er not-null og ældre end 30 minutter (eksempelvis). Hvis det er det, så reset de felter du nu har behov for, incl last_seen til null (så brugeren ikke bliver ersat flere gange)

Dette script skal jo så startes indimellem. Gerne reglmæssigt. Hvordan du kan gøre det afhænger meget af hvad du har af muligheder. Hvis du har mulighed for at bruge cronjobs, så gør det. Ellers placer dette script på fx. login-siden (så når folk forsøger at logge på, så ryddes der op først) - eller på en side der udføres reglmæssigt.

Du kan også gøre det på din forside, men afhængig af hvor mange hits du får der, så kan du måske også overveje at gøre det hver 10.ende gange. (brug random mellem 0-9 , hvis den er 0, så udfør funktionen, ellers lad hver).
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