Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]użytkownik zamknął stronę ... info
Forum PHP.pl > Forum > Przedszkole
Maciasplus
Witam.

czy da się stwierdzić skryptem PHP że użytkownik zamknął stronę?

albo czy istnieje blokada wykonywania skryptu po zamknięciu przeglądarki?

(tylko PHP)

wystarczy mi tylko odp "tak" "nie"... i malutka podpowiedź tongue.gif
lessi
Niech zgadnę ... sprawdzenie czy użytkownik jest zalogowany?
Też nad tym myślałem jak to zrobić. Ale nie znalazłem sposobu. Ja z logowaniem mam inny.
Kildyt
Bardzo pomógłby JS, ale skoro tylko w PHP to można co kilka sekund wysyłać do serwera ze strony użytkownika informację i zapisywać je w bazie. Jako identyfikator możesz użyć time zapisany w sesjach użytkownika przy pierwszym wejściu.
Skrypt odświeżający możesz umieścić w iframe (nie za dobre rozwiązanie, zniknie w HTML 5) i odświeżać ramkę HTML-em co x sekund. Równie dobrze można zrobić wysyłanie informacji o wizycie przy przejściu na podstrony, ale pierwsze rozwiązanie bardziej przybliży ci czas zamknięcia. Pamiętaj, że niektóre przeglądarki (np. IE 6 w windosyfie) podczas odświeżania strony puszcza krótki dźwięk informujący, a to za kolei może być denerwujące dla użytkownika.
lessi
Ja rozwiązałem to innym sposobem. Wraz z odświeżaniem wysyła czas wykonania. Później funkcją
  1. TIMESTAMPDIFF(MINUTE,ost_ak,NOW())<5
patrzy czy użytkownik wykonał jakąś akcję w przeciągu 5 min. Jeżeli tak to wyświetla. Jeżeli nie to nie. Oczywiście to jest mysql . Ale samym php chyba nie da się dokładnie porównać czasu. Próbowałem ale jest błąd o równej godzinie np. 9:00 do 9:05
Kildyt
Cytat(lessi @ 31.12.2009, 10:26:31 ) *
Ja rozwiązałem to innym sposobem. Wraz z odświeżaniem wysyła czas wykonania. Później funkcją
  1. TIMESTAMPDIFF(MINUTE,ost_ak,NOW())<5
patrzy czy użytkownik wykonał jakąś akcję w przeciągu 5 min. Jeżeli tak to wyświetla. Jeżeli nie to nie. Oczywiście to jest mysql . Ale samym php chyba nie da się dokładnie porównać czasu. Próbowałem ale jest błąd o równej godzinie np. 9:00 do 9:05

Nie za bardzo rozumiem o co ci chodzi. Najlepiej czas porównywać w formie zwróconej wartości funkcji time. Dopiero wtedy poprzez date i strtotime można wyświetlić ją w żądanym formacie.

W jaki sposób rozpoznajesz użytkowników?
lessi
Gdy użytkownik się zaloguje dodaje że jest zalogowany (jedynka w swoim rekordzie)oraz od tej pory za każdym razem gdy przeładuje stronę będzie dodawał do bazy danych godzinę now() (mysql). Później docieramy do Zalogowani użytkownicy. Jeżeli nie jest zalogowany to go nie wyświetla. Jednak może się tak stać, że użytkownik nie wyloguje się i zamknie przeglądarkę, (stąd też myślę że o to chodzi Maciasplus) a w bazie zostanie jedynka. Wiec po to jest ten czas żeby badać aktywność użytkownika. Wtedy
  1. $result=mysql_query("SELECT login FROM users WHERE TIMESTAMPDIFF(MINUTE,ost_ak,NOW())<5 and zal!=0");

Wyświetla wszystkich użytkowników którzy mają jedynkę w swoim rekordzie oraz różnica pomiędzy teraz a ostatnią akcją nie jest większa niż 5 min. Może da się inaczej zrobić to też będę wdzięczny.
PS. Ja początku miałem błąd ponieważ używałem tylko funkcji date. I stąd i wychodził czas ujemny.
PS2. sorry Maciasplus że tak się rozpisuje w twoim temacie.
Pawel_W
  1. $minuty=10;
  2. $czas=time()+60*$minuty;
  3. $bazaip = file("online.txt");
  4. $ile=count($bazaip);
  5. $ip = $_SERVER['REMOTE_ADDR'];
  6. for ($i=0; $i < $ile; $i++) {
  7. $pol = explode("`",$bazaip[$i]);
  8. if ($pol[2] < time()) {$bazaip[$i]= "";}
  9. if ($pol[1]==$ip) {
  10. $bazaip[$i]="`$ip`$czas`\n"; $jest=1;
  11. }
  12. }
  13. if ($jest<>1) $bazaip[]="`$ip`$czas`\n";
  14. $f = fopen("online.txt","w");flock($f,2);
  15. for ($i=0; $i < $ile+1; $i++) {
  16. if ($bazaip[$i]<>"") { fwrite($f, $bazaip[$i]); $ileip++;}
  17. }
  18. flock($f,3); fclose($f);

skrypt działa jako licznik online, ale wystarczy że sprawdzisz czy jest tam ip użytkownika i masz czy jest zalogowany winksmiley.jpg

EDIT: skrypt ofc nie mój, znalazłem kiedyś w sieci winksmiley.jpg
Kildyt
Cytat(Pawel_W @ 31.12.2009, 11:05:21 ) *
skrypt działa jako licznik online, ale wystarczy że sprawdzisz czy jest tam ip użytkownika i masz czy jest zalogowany winksmiley.jpg
IMHO adres ip nie jest najlepszą metodą identyfikowania użytkownika.
lessi
Cytat(Kildyt @ 31.12.2009, 11:22:49 ) *
IMHO adres ip nie jest najlepszą metodą identyfikowania użytkownika.

Też z tym się zgadzam, bo nie każdy ma stałe ip
Maciasplus
Cytat(Kildyt @ 31.12.2009, 09:17:20 ) *
... skoro tylko w PHP to można co kilka sekund wysyłać do serwera ze strony użytkownika informację i zapisywać je w bazie. Jako identyfikator możesz użyć time zapisany w sesjach użytkownika przy pierwszym wejściu.


Tak też zrobiłem ale po zamknięciu strony skrypt jest dokańczany na serwerze aż do set_time_limit

jakiś inny sposób? sadsmiley02.gif
Pawel_W
Cytat(lessi @ 31.12.2009, 12:57:16 ) *
Też z tym się zgadzam, bo nie każdy ma stałe ip

no ale chyba nie zmienia mu się co chwilę? wystarczy przechowywać jakiś id usera w sesjach i potem sprawdzać czy ip się zmienił, jeżeli tak to go nadpisać...
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.