Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]użytkownik zamknął stronę ... info, tylko w php
Maciasplus
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.12.2008

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
lessi
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


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.

Ten post edytował lessi 31.12.2009, 08:55:49
Go to the top of the page
+Quote Post
Kildyt
post
Post #3





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


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.

Ten post edytował Kildyt 31.12.2009, 09:30:13


--------------------
Go to the top of the page
+Quote Post
lessi
post
Post #4





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


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
Go to the top of the page
+Quote Post
Kildyt
post
Post #5





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


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?


--------------------
Go to the top of the page
+Quote Post
lessi
post
Post #6





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


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.

Ten post edytował lessi 31.12.2009, 10:03:19
Go to the top of the page
+Quote Post
Pawel_W
post
Post #7





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


  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

Ten post edytował Pawel_W 31.12.2009, 10:05:51
Go to the top of the page
+Quote Post
Kildyt
post
Post #8





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


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.


--------------------
Go to the top of the page
+Quote Post
lessi
post
Post #9





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


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
Go to the top of the page
+Quote Post
Maciasplus
post
Post #10





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 10.12.2008

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


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
Go to the top of the page
+Quote Post
Pawel_W
post
Post #11





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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ć...
Go to the top of the page
+Quote Post

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 Aktualny czas: 20.08.2025 - 05:52