Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Status Online/Offline użytkownika
Forum PHP.pl > Forum > Przedszkole
Bitkosa
Jak zrobić taki skrypt, który będzie wyświetlał status Online/Offline użytkownika o danym ID. Proszę o pomoc.
lukaszgolder
Możesz np stworzyć bazę danych z użytkownikami online, no i dodawać / aktualizować tam rekordy na bieżąco. Po aktualizacji zawsze usuwać wpisy o czasie < time() - 60 * 15 (powiedzmy 15 minut). No i sprawdzasz czy użytkownik znajduje się w tabeli.
Bitkosa
Tak właśnie chciałem zrobić tylko gorzej z wykonaniem. tongue.gif
PawelC
Jeszcze lepiej mieć w tabeli z użytkownikami, kolumne online, i podczas logowania zrobić update tej kolumny na tak, jak się wyloguje to, zmienić na nie smile.gif A jak będziesz chciał pobrać wszystkich online, to bez problemu to zrobisz.  
ZuyPan
@ExPlOiT
a co jeśli użytkownik wyłączy przeglądarkę bez wylogowania? pole się nie zmieni i nadal będzie widoczny jako zalogowany...
PawelC
Cytat(ZuyPan @ 11.02.2010, 13:30:44 ) *
@ExPlOiT
a co jeśli użytkownik wyłączy przeglądarkę bez wylogowania? pole się nie zmieni i nadal będzie widoczny jako zalogowany...
Np ustawiać czas zycia sesji

  1. ini_set ( 'session.gc_maxlifetime', 7200);



webdice
Po każdej akcji użytkownika powinno być aktualizowane pole z datą ostatniej aktywności. Teraz przykładowo dane aktualizowane są co 15 minut, jeśli czas jest ostatniej aktywności jest mniejszy od aktualnego czasu o co najmniej 15 minut, możesz uznać takiego użytkownika za wylogowanego. Oczywiście po kliknięciu w przycisk wyloguj możesz oznaczyć użytkownika jako wylogowanego.
Bitkosa
A mógłby ktoś pomóc przy skrypcie?questionmark.gif
webdice
Tak
Bitkosa
Mam takie coś ale nie wiem czy będzie dobrze
  1. if($login_check > 0){
  2. mysql_query("UPDATE ava_users SET status='online' WHERE id='".$id."'");
  3. }
  4.  
  5. else if ($_GET[action] == logout) {
  6. mysql_query("UPDATE ava_users SET status='offline' WHERE id='".$id."'");
  7. }
Rysh
Ja bym to zrobił tak.
W mysql kolumna DATATIME.
I raz na 5 minut aktualizował profil uzytkownika.

  1. <?php
  2. if ($_SESSION['zalogowany'] == true) {
  3. if (time() > (time() - 5*60)) {
  4. mysql_query("UPDATE `player` SET `data`=NOW() WHERE `id`='". $_SESSION['id'] ."'");
  5. }
  6. //reszta strony
  7. }
  8. ?>


A na koniec sobie sprawdzasz czy player jest online jeśli 1-online jeśli 0-offline:
  1. $online = mysql_num_rows(mysql_query("SELECT `id` FROM `player` WHERE `id`='$id_playera' AND data BETWEEN DATE_SUB( NOW( ) , INTERVAL 15 MINUTE ) AND NOW()"));
Bitkosa
Wszystko ładnie ale aktualizuje mi tylko użytkowników online natomiast gdy użytkownik się wyloguje status pozostaje na online mad.gif
Rysh
Możesz dodać przy wylogowywaniu datatime NOW()-3 minuty, wtedy zostanie uznany za offline odrazu po wylogowaniu. Proste.

EDIT:
Źle napisałem dwa posty wyżej.
  1. <?php
  2. if ($_SESSION['zalogowany'] == true) {
  3. if ($_SESSION['czas'] < (time() - 60)) {
  4. $_SESSION['czas'] = time();
  5. mysql_query("UPDATE `player` SET `data`=NOW() WHERE `id`='". $_SESSION['id'] ."'");
  6. }
  7. //reszta strony
  8. }
  9. ?>
Bitkosa
Dzięki za pomoc
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.