Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak sprawdzić, czy użytkownika już nie ma?
Forum PHP.pl > Forum > PHP
golab
Witam,


Użytkownik loguje się do serwisu.
Mamy session_start(), dodajemy jakieś wartości w $_SESSION[..] itd.
Teraz użytkownik, zamiast nacisnąć "wyloguj" wyłącza przeglądarkę przyciskiem [x]

Jak wykryć, że nie ma go już na stronie?
Jak wykonać polecenia PHP takie jak przy wylogowywaniu, jeżeli nagle urwał wysyłanie rządań do serwera i nie nacisnął "wyloguj"?
Michael2318
Możesz mu przypisać do sesji ostatnią aktywność:

  1. $_SESSION['last_active'] = time();


teraz, zakładasz, że długość sesji ma wynosić powiedzmy 10 minut - jeśli gość przekroczy ten czas bezczynności to jest to dla Ciebie jednoznaczna informacja, że jego już na stronie nie ma, a jeśli by nawet był to go wylogowujesz i każesz się zalogować jeszcze raz:

  1. if ( $_SESSION['last_active']+(10*60) > time() )
  2. {
  3. // user przekroczył limit czasu
  4. header('Location: logowanie.php');
  5. }
patryczakowy
Lepiej odpytywać ajaxem co określony czas i aktualizować czy użytkownik jest zalogowany czy nie. Daje to o wiele więcej możliwości. Możesz wylogować użytkownika np. po 30 minutach nawet jak nieprzeładował strony lub nie pozwoloć na wylogowanie użytkownika który nieprzeładował strony a miną już zadany czas.
golab
Cytat(Michael2318 @ 28.07.2014, 14:39:29 ) *
Możesz mu przypisać do sesji ostatnią aktywność:

  1. $_SESSION['last_active'] = time();


teraz, zakładasz, że długość sesji ma wynosić powiedzmy 10 minut - jeśli gość przekroczy ten czas bezczynności to jest to dla Ciebie jednoznaczna informacja, że jego już na stronie nie ma, a jeśli by nawet był to go wylogowujesz i każesz się zalogować jeszcze raz:

  1. if ( $_SESSION['last_active']+(10*60) > time() )
  2. {
  3. // user przekroczył limit czasu
  4. header('Location: logowanie.php');
  5. }


No dobrze, ale w jaki sposób aktywować twój kod, tj.

  1. if ( $_SESSION['last_active']+(10*60) > time() )
  2. {
  3. // user przekroczył limit czasu
  4. header('Location: logowanie.php');
  5. }


jeżeli użytkownik wyłączył komputer/przeglądarkę i już w żaden sposób nie wysyła jakichkoliwek rządań, któe mogą odpalić skrypt php na mojej stronce?
Pyton_000
Przy nast. wejściu sprawdzasz
ew. zapisujesz sesję w BD z czasami i cyklicznie sprawdzasz przedawnione sesje
Michael2318
Dodaj w bazie, w tabeli z userami, kolumnę last_active i trzymaj tam ostatni czas aktywności użytkownika, czyli powiedzmy zaraz po połączeniu się z bazą danych ładuj co odświeżenie, obecny czas:

  1. <?php
  2.  
  3.  
  4. mysql_connect(); // połączenie
  5.  
  6. // wstępne jakieś instrukcje
  7. // ...
  8.  
  9. if ( $userdata['last_active']+(10*60) < time() )
  10. {
  11. // user przekroczył limit czasu
  12. header('Location: logowanie.php');
  13. }
  14.  
  15. $sql = "UPDATE `users_table` SET last_active = ".time()." WHERE user_id = ".$userdata['user_id'];
  16. if ( !($result = mysql_query($sql)) )
  17. {
  18. die('error in sql<br>'.mysql_error());
  19. }


Teraz jak sprawdzić czy user jest obecnie na stronie?

  1. $dlugosc_sesji = 10; // w minutach
  2. if ( ($userdata['last_active'] + ($dlugosc_sesji*60)) < time() )
  3. {
  4. echo 'ten user nie jest zalogowany, jego dlugosc sesji przekroczyla 10min';
  5. }


i Ty w ten sposób sprawdzasz czy user jest zalogowany.
Userowi za to wyświetlasz kod, który zacytowałeś z mojej wcześniejszej wypowiedzi.

Cytat
jeżeli użytkownik wyłączył komputer/przeglądarkę i już w żaden sposób nie wysyła jakichkoliwek rządań, któe mogą odpalić skrypt php na mojej stronce?


Teoretycznie, idąc tym tropem, owszem - user jest zalogowany. Ale nawet jeśli włączy ten komputer to Ty mu wyświetlisz właśnie ten kod:

  1. if ( $_SESSION['last_active']+(10*60) < time() )
  2. {
  3. // user przekroczył limit czasu
  4. header('Location: logowanie.php');
  5. }


i on już nie będzie zalogowany. A jego stan (online/offline) sprawdzasz w ten sposób, który podałem Ci wyżej.
CuteOne
1. Najpierw powiedz jaki jest cel sprawdzenia czy użytkownik jest zalogowany
2. Czy informacja o zamknięciu przeglądarki jest ci potrzebna od razu, czy możesz ją otrzymać powiedzmy po 1 min?


ps. wszystkie podane wyżej metody są i tak do 4 liter, więc nie bierz z nich przykładu smile.gif
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.