Zliczanie ilosci uzytkownikow na stronie i szpiegowanie[php]
Katalog znalezionych hasełArchiwum
- Moje największe skarby i opowieści prosto z mojego
- Policja wytropi użytkowników portalu Odsiebie.com
- Nietypowa pro¶ba policji do użytkowników CB radia
- W Polsce najwięcej użytkowników OpenOffice.org
- DO uzytkowników niezarejestrowanych przegladajacych forum
- Podatki za użytkownie wieczyste w Warszawie
- Lokal użytkowy - Osiedle Pogodne
- Użytkownik allegro: bartekzrn
- Funkcja rejestracji i logowania [php]
- EKG2 i php ( boot )
- czy kto¶ może zaktualizować godzinę na stronie głównej "
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- demonter.keep.pl
Moje największe skarby i opowieści prosto z mojego
chodzi ogolnie o to, ze procz zliczania ilosci uzytkownikow na stronie
mozna sie dowiedziec gdzie sa aktualnie uzytkownicy, jakie tematy
odwiedzaja itd ...
Pomysl jest dosc prosty i kazdy nawet srednio zaawansowany
programista php moze sobie cos takiego napisac.
Aby caly proces zautomatyzowac i zeby zadzialal na kazdej podstronie
potrzebny bedzie nam osobny skrypt logowania, ktory bedzie wywolywany
w kazdej podstronie. Jesli ktos juz napisal sobie taki skrypt
dobrze to dobrze jest umiescic w tabeli dwa pola, a jesli zajdzie
potrzeba notowania wiekszej ilosci danych to wiecej pol.
Np czas logowania w postaci znacznika czasu, podstrona na jakiej byl ostatnio
uzytkownik, i jesli ktos chce to IP i inne.
Jesli kazda podstrona bedzie zawierac cos takiego :
$podstrona = 'Strona glówna';
include'skrypt_logowania.php';
to dalej w 'skrypt_logowania.php' za kazdym razem jesli uzytkownik jest zalogowany
na stronie uzupelniamy pola czasu logowania oraz podstrony o aktualne dane.
Teraz zeby sie dowiedziec czy uzytkownik jest zalogowany na stronie, czy ilu jest
zalogowanych i kto jest gdzie wystarczy zadac pytanie do bazy w postaci :
$sql = mysql_query("SELECT login, podstrona FROM uzytkownicy WHERE czas_logowania>'" .(time() - 120) ."'");
while(list($login,$podstrona) = mysql_fetch_row($sql)) {
echo "$login jest aktualnie na podstronie : $podstrona<br>";
}
W ten sposob otrzymujemy informacje kto sie logowal na stronie przez ostatnie 2 minuty
czyli 120 sekund temu.
Takie proste rozwiazanie oczywiscie ma swoje wady bo jesli uzytkownik zmieni podstrony
czesciej niz w ciagu ostatnich 2 min to bedzie wiecej wpisow z podstronami gdzie jeden
i ten sam uzytkownik bedzie dopisany. Ale to tez nie jest problem bo wystarczy
do zapytania dodac :
FROM `" . TABLE_PREFIX . "uzytkownicy`GROUP BY `czas_logowania` ORDER BY `czas_logowania` ASC
No i jeszcze jedna istotna wada. Takie podejscie do sprawy bedzie zliczac jedynie
uzytkownikow zalogowanych, ale czesto chcemy wiedziec tez ilu i gdzie sa uzytkownicy
nie zalogowani. W tym wypadku trzeba utworzyc osobna tabele gdzie bedziemy takie
informacje przetrzymywac i w ten sam sposob zapisywac nasze informacje :
$terazjest = time();
$aktual_ip_uzytk = $_SERVER["REMOTE_ADDR"];
$dl_sesji_szp = '120'; // ile dane powinny byc wazne w szpiegu
$waznosc_szp = $terazjest - $dl_sesji_szp; // czy juz minela waznosc
$db = mysql_query("DELETE FROM em_szpieg WHERE data_dodan<'$waznosc_szp'");
$nazwa_pstrony = preg_replace("[\']", "’", $nazwa_pstrony);
$nazwa_pstrony = preg_replace("[\"]", "", $nazwa_pstrony);
$sql_szp = mysql_query("SELECT id_szpieg FROM em_szpieg WHERE (ip_uzyt='$aktual_ip_uzytk' AND gdzie_jest='$nazwa_pstrony')");
$dane_szp = list($id_szpieg) = mysql_fetch_row($sql_szp);
$uzyt_szp = $_SESSION['em_uzytkownik'];
if ($id_szpieg == '') {
mysql_query("INSERT INTO em_szpieg VALUES ( NULL, '$terazjest', '$nazwa_pstrony', '$aktual_ip_uzytk', '$uzyt_szp')");
} else {
$db = mysql_query("UPDATE em_szpieg SET data_dodan='$terazjest', gdzie_jest='$nazwa_pstrony', login='$uzyt_szp' WHERE id_szpieg='$id_szpieg'");
}
W ten sposob mamy zapisywane dane, gdzie jest uzytkownik i jak dawno sie zalogowal.
Wystarczy teraz podzielic tabele wyswietlajaca dane na dwie podgrupy z uzytkownikami
zalogowanymi i nie zalogowanymi i gotowe.
Skrypt bardzo uproscilem zeby poczatkujacy mogli sobie to przeanalizowac.
Na poczatku obliczamy stala zawsze mniejsza od aktualnego znacznika czasu
i dlugosc sesji, czyli o ilosc sekund jaka nas interesuje.
Pozniej sa z tabeli szpiega usuwane wszystkie wpisy starsze niz ten znacznik czasu.
Teraz jesli uzytkownik juz byl na stronie to jest tylko zmiana wpisow w tabeli, a
jesli jeszcze uzytkownik nie byl na stronie i dopiero wszedl jest dodawany
nowy wpis.
Jesli nam zalezy jedynie na zliczaniu ilosci uzytkownikow na stronie to wystarczy
zliczac ilosc IP na stronie w ostatnim zadanym czasie co nie jest trudne.
Oczywiscie to ma swoja wade poniewaz moze dwoch uzytkownikow wejsc na
strone bedacych z tej samej sieci komputerowej, a co za tym idzie maja taki sam
adres IP. Dlatego najlepiej jesli przy wejsciu na strone sprawdza sie czy jest
zapisane odpowiednie spreparowane ciastko, a jesli nie to zapisuje sie nowe.
Mozna zywotnosc takiego ciastka ustawic na dlugosc sesji na stronie i wtedy beda juz
zliczane dokladnie pojedyncze komputery przebywajace na stronie.
Przy podejsciu do sprawy przy pomocy ciastek uzyskujemy jeszcze jedna informacje
Mozna dowiedziec sie ilu jest uzytkownikow, ktorzy wchodza pierwszy raz
na stronie, a ilu jest takich ktorzy juz byli wczesniej, ale to juz pozostawiam Wam
do rozwiazania ...