Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak sprawdzić, czy użytkownika już nie ma?
golab
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2013

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


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"?
Go to the top of the page
+Quote Post
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


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. }


Ten post edytował Michael2318 28.07.2014, 13:42:42
Go to the top of the page
+Quote Post
patryczakowy
post
Post #3





Grupa: Zarejestrowani
Postów: 420
Pomógł: 44
Dołączył: 22.10.2008

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


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.


--------------------
Sztuką jest widzieć to czego nie widać.
Go to the top of the page
+Quote Post
golab
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 15.03.2013

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


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





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Przy nast. wejściu sprawdzasz
ew. zapisujesz sesję w BD z czasami i cyklicznie sprawdzasz przedawnione sesje
Go to the top of the page
+Quote Post
Michael2318
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


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.

Ten post edytował Michael2318 18.08.2014, 10:42:59
Go to the top of the page
+Quote Post
CuteOne
post
Post #7





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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
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: 22.08.2025 - 00:29