Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Wykonanie skryptu przy zamknięciu przeglądarki
Hannon
post 24.12.2007, 15:12:49
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.02.2005

Ostrzeżenie: (0%)
-----


Przy zamknięciu przeglądarki zamykana jest sesja - ok.
Chciałem zapisać pare informacji przy zamknięciu przeglądarki.
Ale ni cholery niewiem jak to zrobić.
Przemknęło mi przez myśl postawienie crona który będzie odpalał skrypt który będzie sprawdzał czy sesja jest zamknięta a jeśli tak to sru zapis ale to sie mija z celem bo godziny nie będą prawidłowe a zmienne juz nie będą istnieć..
Brakuje mi jakiegoś spustu który wykona to.
Zastanawiałem się nad wykorzystaniem javascriptu onClose="x"
ale to chyba też nie zadziała bo jak to wrzuce to przecież nie wykona mi skryptu bo to po stronie przeglądarki a nie serwera.

Ma ktoś jakieś pomysły ?


--------------------
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
webdice
post 24.12.2007, 15:27:47
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Mi do głowy przychodzi na razie jeden nie zbyt elegancki pomysł. Po zamknięciu przeglądarki wyskakuje POP-UP otwierający plik PHP który usuwa sesję, a następnie sie sam zamyka. Nie wiem tylko jak jest z sesjami w POP-UP'ach.
Go to the top of the page
+Quote Post
sniezny_wilk
post 24.12.2007, 15:50:40
Post #3





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


A jakie informacje chcesz przekazać ? Może da się to jakoś obejść

@webdicepl - z tego co wiem pop-up będzie miał taki sam dostęp do sesji jak i strona z jakiej jest wywoływany.

Ale co w przypadku, gdy user po prostu wyłączy komputer nie zamykając przeglądarki ? Czy to są jakieś ważne dane ?


--------------------
Go to the top of the page
+Quote Post
webdice
post 24.12.2007, 16:00:17
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Był kiedyś o tym temat na forum, nie ma dobrego sposobu na zrobienie czegoś takiego.

Cytat(sniezny_wilk @ 24.12.2007, 15:50:40 ) *
@webdicepl - z tego co wiem pop-up będzie miał taki sam dostęp do sesji jak i strona z jakiej jest wywoływany.


Nie korzystam z POP-UP'ów, ale z tego co pamiętam w IE6 miał chyba inną sesje.
Go to the top of the page
+Quote Post
Boski
post 24.12.2007, 16:02:41
Post #5





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 22.12.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


można robić backupa sesji co x sekund lub przy odświeżeniu strony a najlepiej żeby w sesji nie trzymać ważnych informacji
Go to the top of the page
+Quote Post
Hannon
post 24.12.2007, 16:03:57
Post #6





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.02.2005

Ostrzeżenie: (0%)
-----


Dopisanie do pliku txt że dany użytkownik o danym ip zamknął przeglądarkę o danej godzinie nie wylogowując się.
Inwigilacja administracji rox.
Czyli nikt niema jakiegoś pomysłu ?


--------------------
Go to the top of the page
+Quote Post
calfik
post 25.12.2007, 01:49:50
Post #7





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.12.2007

Ostrzeżenie: (0%)
-----


no moze a ktos mogl by mi  podpowiedziec jak przy zamykaniu przegladarki dokonac zmiany w zmiennych i  wyslac te zmienne na server questionmark.gif
Go to the top of the page
+Quote Post
.chudy.
post 25.12.2007, 10:40:13
Post #8





Grupa: Zarejestrowani
Postów: 70
Pomógł: 3
Dołączył: 15.06.2003
Skąd: kosmosu?

Ostrzeżenie: (0%)
-----


Może zrób mniej więcej tak. Przy logowaniu się usera wprowadz do bazy date logowania (oczywiście z czasem winksmiley.jpg ) i przy POPRAWNYM wyjściu ze strony (logout) wprowadz date kiedy sie wylogował, następnie przy ponownym logowaniu będzie sprawdzał czy ostatnio user się wylogował. Albo używając ajaxu sprawdzaj czy user jeszcze siedzi na stronie.


--------------------
Warsztat#1 ::drum and bass:: Apache2.2 :: PHP 5.2 ::
Go to the top of the page
+Quote Post
calfik
post 25.12.2007, 21:01:00
Post #9





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.12.2007

Ostrzeżenie: (0%)
-----


a jakies informacje co w tym ajaxie trzeba napisac i jak to napisac jakies przyklady bo juz nie jedna osoba mi mowila ze tak ale ja nie mam zielonego pojecia
Go to the top of the page
+Quote Post
czachor
post 25.12.2007, 21:18:07
Post #10





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Może coś z tym? Obsługa połączeń i connection_aborted().


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
Hannon
post 25.12.2007, 23:48:07
Post #11





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.02.2005

Ostrzeżenie: (0%)
-----


No... ale wyjście ze strony != logout.
Wyjście ze strony to zamknięcie okna z stroną.
Wylogowanie to zakończenie sesji.

Z zakończeniem sesji moge sobie poradzić, ale jak wykonać skrypt przy zamykaniu/po zamknięciu.


--------------------
Go to the top of the page
+Quote Post
calfik
post 30.12.2007, 14:36:42
Post #12





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.12.2007

Ostrzeżenie: (0%)
-----


Hannon a mogl bys powiedziec jak to zrobiles bo mam problem z tym zeby to wymyslec jak to zrobic przykladowy jakis kod mogl bys mi podac albo na maila calfik@gmail.com
Go to the top of the page
+Quote Post
Babcia@Stefa
post 30.12.2007, 14:44:56
Post #13





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

Ostrzeżenie: (0%)
-----


Cytat(Hannon @ 25.12.2007, 23:48:07 ) *
No... ale wyjście ze strony != logout.
Wyjście ze strony to zamknięcie okna z stroną.
Wylogowanie to zakończenie sesji.

Z zakończeniem sesji moge sobie poradzić, ale jak wykonać skrypt przy zamykaniu/po zamknięciu.


To proste.
Wystarczy wykorzystać Ajax.
  1. <script type="text/javascript"> // pierwsza część kodu var ObiektXMLHttp = false;
  2. if (window.XMLHttpRequest)
  3. {
  4. ObiektXMLHttp = new XMLHttpRequest(); }
  5. else if (window.ActiveXObject)
  6. {
  7. ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  8.  
  9. // druga część kodu
  10. function getData(zrodlo) {
  11. if(ObiektXMLHttp)
  12. {
  13. ObiektXMLHttp.open("GET", zrodlo);
  14.  
  15. ObiektXMLHttp.onreadystatechange = function()
  16. {
  17. }
  18. // trzecia część kodu
  19. ObiektXMLHttp.send(null); } } </script>


W kodzie html:

  1. <body onunload="getData('sesje.php');">


Sesje.php
Kod
<?php
include('controller.php');
$session = new SESSION();
$session -> destroyall();
?>


@edit
Źródło ajax:
http://webmade.org/porady/ajax.php

Dziękuję, Babcia@Stefa

Ten post edytował Babcia@Stefa 30.12.2007, 14:45:21


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
k0b3
post 21.08.2008, 00:00:56
Post #14





Grupa: Zarejestrowani
Postów: 138
Pomógł: 0
Dołączył: 1.08.2006
Skąd: Kielce

Ostrzeżenie: (0%)
-----


ten ajax za pomocą jQuery dało by się zrobić?
Kilka funkcji użyłem i szkoda gdybym pisał ten powyższy skrypt jak mam takiego frameworka.
Go to the top of the page
+Quote Post
bim2
post 21.08.2008, 00:39:01
Post #15





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


No wywołaj to tak samo jak ajax w jquery ;p
onunload="$('#div').load('session.php');"

czy jak tam to robisz


--------------------
Go to the top of the page
+Quote Post
krowal
post 21.08.2008, 07:18:08
Post #16





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


@Babcia@Stefa
Twoje rozwiązanie jest ok, ale... ssie winksmiley.jpg jeśli ustawisz unload na body to reakcja będzie nawet wtedy gdy klikniesz jakiegoś linka lub odświeżysz stronę. Poza tym gdzieś czytałem, że chyba nie działa dobrze w IE6 (nie sprawdzałem).
Ja bym to zrobił w taki sposób, że wysyłałbym ajaxem np. co 5 min informację z sessionid o aktywności użytkownika i jeśli sesja nie wygasła to zapisywałbym czas ostatniej aktywności. Jeśli użytkownik wylogowałby się poprawnie to ustawiłbym w bazie przy jego sesji jakiś znacznik informujący o poprawnym wylogowaniu np. logged_out = 1 (domyślnie ustawiane na 0). Później jakiś administrator wchodząc na stronę otrzymywałby info o wszystkich użytkownikach dla których logged_out == 0 i czas ostatniej aktywności był wcześniejszy niż NOW() - 5min

W ten sposób możesz określić czas wyjścia bez wylogowania z dokładnością do 5 min.

Edit: @chudy, nie zauważyłem, że mniej więcej to samo już napisałeś smile.gif

Ten post edytował krowal 21.08.2008, 07:25:05


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
LBO
post 21.08.2008, 09:33:24
Post #17





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


JA bym się najpierw zastanowił, czy nie można tego obejść. Język PHP nie ma dostępu do przeglądarki przecież i wszelkie próby emulowania tego, czy to przez pop-upy, czy AJAX są zawodne (czyt. nie można na nich polegać).
Podsumowując - nigdy nie będziesz pewny, że użytkownik zamknął przeglądarkę. I zamiast siedzieć nad obejściem tego, pomyśl nad innym rozwiązaniem.

edit: zastanawia mnie co to za informacje chcesz zapisywać, przy zamknięciu? Bo tak czy siak, te informacje są na pewno dostępne przy każdym requeście, prawda?
Użytkownik wchodzi na stronę zapisujesz te dane w bazie i w sesji, przy każdym następnym requeście sprawdzasz różnice - jeżeli takie istnieją dopisujesz/nadpisujesz je do bazy. Rozwiązane.

Ten post edytował LBO 21.08.2008, 09:38:27
Go to the top of the page
+Quote Post
k0b3
post 21.08.2008, 10:39:54
Post #18





Grupa: Zarejestrowani
Postów: 138
Pomógł: 0
Dołączył: 1.08.2006
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Cytat(LBO @ 21.08.2008, 09:33:24 ) *
Użytkownik wchodzi na stronę zapisujesz te dane w bazie i w sesji, przy każdym następnym requeście sprawdzasz różnice - jeżeli takie istnieją dopisujesz/nadpisujesz je do bazy. Rozwiązane.


jak za pomocą php sprawdzić czy dana sesja zostałą zakończona?
Jak rozumiem, zakończenie danej sesji jest przy zamknięciu przeglądarki.

informacje o sesji przetrzymuje w bazie sql: session_id() oraz id użytkownika. Gdy jest -1 to znaczy ze jest to gość, gdy przybiera numery od 1 oznacza ze ktos z id1 jest zalogowany.

da sie to jakoś wykorzystać?

Ten post edytował kobemat 21.08.2008, 10:42:41
Go to the top of the page
+Quote Post
LBO
post 21.08.2008, 10:49:24
Post #19





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie wiesz tego i się nie dowiesz... niestety.
Go to the top of the page
+Quote Post
k0b3
post 21.08.2008, 11:01:47
Post #20





Grupa: Zarejestrowani
Postów: 138
Pomógł: 0
Dołączył: 1.08.2006
Skąd: Kielce

Ostrzeżenie: (0%)
-----


no to moze odwrotnie.

Czy da sie sprawdzić aktywność danej sesji? taki ping do użytkownika ;P jeśli nie ma odpowiedzi coś tam się robi.


BTW, skrobnijcie kodem na to poniższe rozwiązanie.. Ajaxem da sie sprawdzić aktywnośc użytkownika wg session_id i czy ta sesja nie wygasła?
Cytat(krowal @ 21.08.2008, 07:18:08 ) *
Ja bym to zrobił w taki sposób, że wysyłałbym ajaxem np. co 5 min informację z sessionid o aktywności użytkownika i jeśli sesja nie wygasła to zapisywałbym czas ostatniej aktywności.


Ten post edytował kobemat 21.08.2008, 11:02:41
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:55