Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zdarzenie zamkniecia okna
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
brachu
no wlasnie z tym onUnload mam kiche.... konretnie potrzebuje zrobic cos takiego ze jak uzytkownik zamknie okno przegladarki to zeby sie wywolala funkcja
  1. <?php
  2. ?>
i teraz jak to zdarzenie zamkniecia okna przegladarki przechwycic?questionmark.gif onUnload w BODY nie dziala, to znaczy dziala troche nadgorliwie bo dziala za kazdym razem jak klikne w jakikolwiek link na stroniea to nie na tym polega sad.gif ma ktos pomysl jak to zrobic?questionmark.gif

pozdrawiam
nospor
No jak ktoś zamknię okno to ty do php sięjuż nie odwołasz.
crash
Te brachu zdradzę Ci sekret: przy zamknięciu strony (przeglądarki) wywołuje się ta funkcja sama tongue.gif (przy założeniu, że nie zostało to zmienione w konfiguracji php)...
revyag
Była już o tym dyskusja, no i wniosek jest taki że nie da się tego zrobić. Trzeba ustawić czas trwania sesji, w zależności o specyfiki strony, po którym sesja wygaśnie, jeśli nie została zakończona prawidłowo.
Javascript nic nie da, bo kiedy będziesz chciał go użyć, php już dawno się wykona.
brachu
Te crashu nie bardzo, bo chodzi mi o zamkniecie pojedynczego okna.... a nie wszystkich okien, jezeli mam otwarte inne strony to kicha session_destry() nie zadziala sad.gif ma ktos jeszcze jakies pomysly?questionmark.gif
revyag
Cytat(crashu @ 2005-07-07 14:26:59)
przy zamknięciu strony (przeglądarki) wywołuje się ta funkcja sama

Ale jeśli funkcja wywyołuje sie sama, to powinien mi zniknąć tymczasowy plik sesji, a nie znika.
crash
Cytat(revyag)
Ale jeśli funkcja wywyołuje sie sama, to powinien mi zniknąć tymczasowy plik sesji, a nie znika.

A to czy ten plik zostanie usunięty zależy już od sesjowego garbage colectora (session.gc_maxlifetime) a ja mowię o czasie aktywności (session.cookie_lifetime)...

Wracając do tematu: Przy założeniu, że użytkownik pozwoli na otwarcie okna przez JS to da się to zrobić...
  1. <body onunload="window.open('niszcz_sesje.php');">

niszcz_sesje.php:
  1. <?php
  2. unset( $_SESSION );
  3. ?>
  4. <script type=\"text/javascript\">
  5.    window.close();
  6. </script>
brachu
a widzisz o tym nie pomyslalem biggrin.gif to jest dobre!!!

dzieki wielkie
iwosz
Cytat(crash @ 7.07.2005, 15:33:33 ) *
Wracając do tematu: Przy założeniu, że użytkownik pozwoli na otwarcie okna przez JS to da się to zrobić...
  1. <body onunload="window.open('niszcz_sesje.php');">

<span style="font-weight: bold;">niszcz_sesje.php</span>:
  1. <?php
  2. unset( $_SESSION );
  3. ?>
  4. <script type=\"text/javascript\">
  5.    window.close();
  6. </script>


hmm, no ok ale jak już kolega w pierwszym poście zauważył:

Cytat(brachu)
onUnload w BODY nie dziala, to znaczy dziala troche nadgorliwie bo dziala za kazdym razem jak klikne w jakikolwiek link na stroniea to nie na tym polega sad.gif


mam podobny problem: dążę do tego aby wylogowywać usera po zamknięciu przeglądarki/karty krzyżykiem windowsowym i TYLKO w takim wypadku, czyli żeby można było odświeżyć stronę za pomocą F5 lub kliknąć w link itd.

jakiś pomysł jak to ładnie zrobić? (co do F5 to nie chodzi o charCode bo można też odświeżyć buttonem 'Refresh' w przeglądarce)
TTomek
Trochę stary temat został odgrzany smile.gif
Miałem podobny problem ale znalazłem rozwiązanie, to był taki skrypt dla potrzeb lokalnych więc pomyślałem o wykorzystaniu <iframe> + javascript.
Wepchnąłem wszystko w duży iframe i problem z odświeżaniem strony i przechodzeniem między stronami zostaje zlikwidowany. Z tego co pamiętam nawet przy resecie komputera skrypt logout.php został wykonany. Może komuś się przyda.

Pozdrawiam Tomek

  1.  
  2. <script type="text/javascript">
  3. window.onbeforeunload = function() {
  4. var AJAX=new XMLHttpRequest();
  5.  
  6. AJAX.onreadystatechange= function() { if (AJAX.readyState!=4) return false; }
  7.  
  8. AJAX.open("GET", 'login/logout.php', false);
  9. AJAX.send(null);
  10. }
  11.  
  12.  
  13.  
  14. </head>
  15. <iframe src="index.php" width="815" height="100%"
  16. frameborder="0">
  17. ups... twoja przegldarka nie obsuguje ramek.
  18. </iframe>
  19.  
  20. </body>
  21. </html>
iwosz
Cytat(TTomek @ 8.04.2010, 14:53:50 ) *
Trochę stary temat został odgrzany smile.gif
Miałem podobny problem ale znalazłem rozwiązanie, to był taki skrypt dla potrzeb lokalnych więc pomyślałem o wykorzystaniu <iframe> + javascript.
Wepchnąłem wszystko w duży iframe i problem z odświeżaniem strony i przechodzeniem między stronami zostaje zlikwidowany. Z tego co pamiętam nawet przy resecie komputera skrypt logout.php został wykonany. Może komuś się przyda.

Pozdrawiam Tomek


No wiem ze stary temat, ale jak bym nowy watek zaczal to by mnie zlinczowali ;]

dobra, ogolnie pomysl z iframe moze nie jest zly, ale wrzucanie calej strony w iframe'a to troche inwazyjna metoda... a ciekawe jak to robia np. w serwisach bankowych, pyslalem o ustawieniu dlugosci zycia ciasteczka sesji na np. 1min. i odswiezanie co 1min ajaxem, ktos tak probowal?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.