Skocz do zawartości

Licznik gości online


milmen

Rekomendowane odpowiedzi

Szukałem na necie jakiegos fajnego licznika online na bazie danych i tylko same kombajny. Wiec zaprzęgłem swoje leniwe dupsko do pracy i zrobiłem coś takiego. Zastanawialem się jednak, czy ponizszy kod jest optymalny, bo wydaje mi sie, ze 3 odwolania do bazy przy zwyklym liczniku on-line to chyba o jedno odwolanie za duzo. Jak ktos ma swój wlasny autorski licznik (na bazach), z mniejsza liczba odwolań do bazy to prosze o podzielenie się kodem (lub wskazówki , co ulepszyć :)

No i mam nadzieję, że komuś się ten skrypcik też przyda :D

Struktura tabeli o nazwie 'online':

id - autoincreament

ip - varchar

data - datetime

<?php

function adres_ip(){

if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else {
 $ip = $_SERVER['REMOTE_ADDR'];
}

return $ip;
}


function online()
{

// pobieranie ip z bazy w celu wyeliminowania niepotrzebnych wpisów do tabeli przez boty
$get_ip=mysql_query("SELECT * FROM online WHERE ip='".adres_ip()."'");
if(mysql_num_rows($get_ip)==1 && !$_SESSION['on_line'])
{
// bot - nie przechowuje sesji po przeladowaniu strony, dlatego musimy mu sesje rejestrowac za każdym wejsciem na stronę (na podstawie ip)
$botip=mysql_fetch_array($get_ip);
$_SESSION['on_line']=$botip['id'];
}


// pierwsze wejscie usera na strone
if(!$_SESSION['on_line'])
{
$insert=mysql_query("INSERT INTO online(ip, data) VALUES('".adres_ip()."', NOW())");
$_SESSION['on_line']=mysql_insert_id();
}
else
{
// przeladowanie strony i update daty w istniejącym juz rekordzie danego usera
$update=mysql_query("UPDATE online SET data=NOW() WHERE id='".$_SESSION['on_line']."'");
if(mysql_affected_rows()==0)
unset($_SESSION['on_line']);  // jesli jednak user zasiedzial sie na danej stronie powyzej 3 minut i jego wpis zostal usuniety (patrz nizej) to trzeba jego sesje usunac, aby po kolejnym przeladowaniu strony jego obecnosc zostala zapisana w tabeli (insert, bo nie sesja niezarejestrowana)
}


// kasujemy rekordy, w których minęło 3 minuty od daty dodania wpisu (czyli te, których rezydenci opuscili juz strone)
$delete=mysql_query("DELETE FROM online WHERE UNIX_TIMESTAMP()-UNIX_TIMESTAMP(data)>5*60");
$get=mysql_query("SELECT * FROM online");
$ile_online=mysql_num_rows($get);

return $ile_online;

} // end of function

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności