Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak sprawdzić czy użytkownik się wylogował?
macromatic
post 29.12.2010, 11:02:26
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.02.2007

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


Mam problem, ponieważ nie za bardzo wiem jak zapisać informację o dacie i godzinie wylogowania użytkownika.

Problemu nie ma, gdy użytkownik naciśnie przycisk Wyloguj i opuści konto, jednak co zrobić gdy użytkownik tego nie zrobi i zamknie okno lub przeglądarkę?
Go to the top of the page
+Quote Post
Fifi209
post 29.12.2010, 11:59:36
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Ustawić odpowiedni czas życia sesji.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
macromatic
post 29.12.2010, 13:55:57
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.02.2007

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


wymyśliłem taką funkcję

  1. //funkcja sprawdzająca czy użytkownik jest jeszcze zalogowany czy wylogował się z systemu
  2. function is_user_active($user_id) { // jako argument podaje id uzytkownika ktory odswieza strone
  3.  
  4. //przypisuje aktualny czas serwera za pomocą funkcji time
  5. $now_time = time();
  6.  
  7. //przypisuję czas o 15 minut wcześniejszy od aktualnego czasu
  8. $time_minus_15_minut = time() - 900; // 900 sekund = 15 minut
  9.  
  10. //aktualizuję pole last_active użytkownika, który wywołał skrypt
  11. $sql = "UPDATE `tabela` SET `last_active` = '$now_time', `status_online` = '1' WHERE `id_user` = '$user_id'";
  12. @mysql_query($sql);
  13.  
  14. //sprawdzam którzy użytkownicy są nieaktywni dłużej niż 15 minut i przypisuje im status 0
  15. $sql2 = "SELECT `id_user` FROM `tabela` WHERE `last_active` < '$time_minus_15_minut' AND `status_online` = '1'";
  16. $wynik2 = @mysql_query($sql2);
  17.  
  18. $liczba_do_wylogowania = mysql_num_rows($wynik2); // ile osób trzeba wylogować
  19.  
  20. if ($liczba_do_wylogowania > 0) {
  21.  
  22. while ($rek2 = mysql_fetch_array($wynik2)) {
  23. $id_user2 = $rek2['id_user'];
  24.  
  25. //aktualizuje status i godzine ostatniej wizyty wylogowanych osób
  26. $sql3 = "UPDATE `tabela` SET `last_visit` = '$now_time', `status_online` = '0' WHERE `id_user` = '$id_user2'";
  27. @mysql_query($sql3);
  28. }
  29. }
  30. }


będzie to działać?

Ten post edytował macromatic 29.12.2010, 14:15:46
Go to the top of the page
+Quote Post
Moli
post 29.12.2010, 16:41:30
Post #4





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


Sprawdź i zobacz ?
Go to the top of the page
+Quote Post
kulczycki
post 29.12.2010, 17:26:59
Post #5





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


  1. //sprawdzam którzy użytkownicy są nieaktywni dłużej niż 15 minut i przypisuje im status 0
  2. $sql2 = "SELECT `id_user` FROM `tabela` WHERE `last_active` < '$time_minus_15_minut' AND `status_online` = '1'";
  3. $wynik2 = @mysql_query($sql2);
  4.  
  5. $liczba_do_wylogowania = mysql_num_rows($wynik2); // ile osób trzeba wylogować
  6.  
  7. if ($liczba_do_wylogowania > 0) {
  8.  
  9. while ($rek2 = mysql_fetch_array($wynik2)) {
  10. $id_user2 = $rek2['id_user'];
  11.  
  12. //aktualizuje status i godzine ostatniej wizyty wylogowanych osób
  13. $sql3 = "UPDATE `tabela` SET `last_visit` = '$now_time', `status_online` = '0' WHERE `id_user` = '$id_user2'";
  14. @mysql_query($sql3);
  15. }
  16. }


To nie jest potrzebne, a raczej zbędne. Robisz 2 razy to samo. Bo Update samo w sobie też ma SELECT podczas WHERE.
Nie rozumiem po co ustawiać aktualny czas dla osób który już są wylogowane.

  1. UPDATE `tabela` SET `status_online` = 0 WHERE `last_active` <= $time_minus_15_minut AND `status_online` = 1;

Jeśli status_online jest int-em to nie używaj cudzysłowa. Nie potrzebnie mysql będzie to konwertował. To samo tyczy się czasu w UNIX

Ten post edytował kulczycki 29.12.2010, 17:30:02
Go to the top of the page
+Quote Post
Rid
post 29.12.2010, 19:12:20
Post #6





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Zamiast funkcji można użyć COOKIES ustawić czas na 15 min przyrównać do SESSION .Kiedy COOKIES wygaśnie wygaśnie również sesja, co będzie efektem wylogowania.
Go to the top of the page
+Quote Post
kulczycki
post 29.12.2010, 21:00:02
Post #7





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


Cytat
Zamiast funkcji można użyć COOKIES ustawić czas na 15 min przyrównać do SESSION .Kiedy COOKIES wygaśnie wygaśnie również sesja, co będzie efektem wylogowania.


Kwestia sesji to jak dla mnie inna sprawa. Pewnie ma kolumnę session_key w tabeli odpowiedzialnej za konta (tak sądzę).
To wszystko powinno wyglądać tak

$_SESSION['key'] > sprawdzanie w bazie key wraz z ip > sprawdzanie czas ostatniej aktualizacji sesji > jeśli większe od time()-15 minut to sesja dalej aktywna jeśli nie to czyści session_key, status_online zeruje i $_SESSION['key'] = ''; np. Jak tam wole w cookies tego nie pakować jakoś

Reszta (czyszczenie starych sesji to kosmetyka + statystyki np.)
Go to the top of the page
+Quote Post
pain3hp
post 29.12.2010, 21:33:17
Post #8





Grupa: Zarejestrowani
Postów: 87
Pomógł: 2
Dołączył: 23.01.2010

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


przy okazji chciałem zapytać po co się robi w bazie pole klucz sesji? Uczę się z książek jeszcze się z tym nie spotkałem natomiast na forach często widzę o tym tematy pośrednie. Domyślam się że po to by weryfikować czy użytkownik który się zalogował to właśnie ten użytkownik który wysyła requesty? Coś poza tym?
Go to the top of the page
+Quote Post
macromatic
post 30.12.2010, 09:17:27
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 20.02.2007

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


Cytat(kulczycki @ 29.12.2010, 17:26:59 ) *
  1. //sprawdzam którzy użytkownicy są nieaktywni dłużej niż 15 minut i przypisuje im status 0
  2. $sql2 = "SELECT `id_user` FROM `tabela` WHERE `last_active` < '$time_minus_15_minut' AND `status_online` = '1'";
  3. $wynik2 = @mysql_query($sql2);
  4.  
  5. $liczba_do_wylogowania = mysql_num_rows($wynik2); // ile osób trzeba wylogować
  6.  
  7. if ($liczba_do_wylogowania > 0) {
  8.  
  9. while ($rek2 = mysql_fetch_array($wynik2)) {
  10. $id_user2 = $rek2['id_user'];
  11.  
  12. //aktualizuje status i godzine ostatniej wizyty wylogowanych osób
  13. $sql3 = "UPDATE `tabela` SET `last_visit` = '$now_time', `status_online` = '0' WHERE `id_user` = '$id_user2'";
  14. @mysql_query($sql3);
  15. }
  16. }


To nie jest potrzebne, a raczej zbędne. Robisz 2 razy to samo. Bo Update samo w sobie też ma SELECT podczas WHERE.
Nie rozumiem po co ustawiać aktualny czas dla osób który już są wylogowane.

  1. UPDATE `tabela` SET `status_online` = 0 WHERE `last_active` <= $time_minus_15_minut AND `status_online` = 1;

Jeśli status_online jest int-em to nie używaj cudzysłowa. Nie potrzebnie mysql będzie to konwertował. To samo tyczy się czasu w UNIX


godzina wylogowania potrzebna mi jest aby przy następnym zalogowaniu pokazać użytkownikowi co się zmieniło od jego wyjścia...

dzięki za cenne wskazówki
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:10