PDA

Zobacz pełną wersję : mod_whosonline jak dodac wykluczenie?



agappe
13-04-2010, 10:29
Wiem tyle, że mod ten pobiera statystyki ile osob jest online z tabeli prefix_session. Niestety nie wiem co dodaje tam wpisy. Chciałbym napisać proste wykluczenie, żeby nie liczyło pewnoego ip które mocno mi zawyża statystyki. Napisać wykluczenie umiem ale nie wiem gdzie.
Pomożecie?

palyga007
13-04-2010, 10:51
Pomożecie! Chyba....

plik helper.php w mod_whosonline.


if (count($sessions)) {
foreach ($sessions as $session) {
// if guest increase guest count by 1
if ($session->guest == 1 && !$session->usertype) {
$guest_array ++;
}
// if member increase member count by 1
if ($session->guest == 0) {
$user_array ++;
} }
}
O ile się nie mylę to ta sekcja odpowiada za zliczanie użytkowników i gości znajdujących się obecnie na stronie i dodawanie wartości do tablic $user_array oraz $guest_array w przypadku pojawienia się nowego gościa. Moim zdaniem wystarczy tylko tutaj dorzucić warunek i po problemie

Pozdrawiam

agappe
13-04-2010, 11:50
A nie wie ktoś może co gromadzi te statystyki w tabeli _session ? Bo ogolnie tabela wyglada tak:
http://my.jetscreenshot.com/demo/20100413-iaiz-208kb.jpg
Więc nie ma możliwości filtrowania po ip bo ip nie ma ;/. Musiałbym więc wiedzieć co zapisuje dane do tej bazy i tam filtrować po ip albo user_agent. Bo na stronie jest 1-3 userow online a to ip mi podbija do ~~21 userow online.

palyga007
13-04-2010, 14:14
Napisać wykluczenie umiem ale nie wiem gdzie.taaa.. ;]


Chyba można to zrobić tak.

Pobierasz informację o ip użytkownika
$ip = $_SERVER['REMOTE_ADDR'];
porównujesz z IP które chcesz zablokować
Jeśli są sobie równe to po prostu nie wykonujesz części kodu odpowiedzialnej za zwiększenie wyświetlanej liczby gości/użytkowników odwiedzających witrynę.

Wycięcie tego adresu w .htaccess nie wchodzi w grę?
IP nie jest przechowywane bo po co.

agappe
13-04-2010, 19:55
Z tego co się orientuje to porównując tak ip porównuje ip osoby aktualnie odwiedziającej serwis. Jeżeli to ip było wcześniej, to i tak je dopisze do listy osób gdy wejdę np ja. Dla tego, potrzebuje filtrować to przy dodawaniu wpisu do _session.

IP jest dodane to htaccess ale niestety to nie pomaga. Dla czego ? Bo to ip firewalla z serwerowni. Dla czego wchodzi na strone? Dla czego mimo htaccess liczy go? Tez chcial bym wiedziec, ale tego nie ominę. Dlatego muszę go filtrować przy dodawaniu do session.

Nie wiem niestety który plik dodaje wpisy.

PS. blokada htaccess działa, sprawdzałem na sobie.

palyga007
13-04-2010, 21:27
Poszukaj tutaj.

libraries/joomla/session

Przyznaje się że o ty nie pomyślałem ;]

Ale jak to się mówi: "it's not a bug is a feature"
a ja sobie jeszcze nad tym pomyśle. :)

agappe
18-04-2010, 20:13
Niby jest coś tam z sesji. Ale nie mogę znaleźć interesującej mnie linijki. Dodawałem w różnych miejscach
if($_SERVER['HTTP_USER_AGENT']=='') return false;
ale niestety nic nie pomagalo ...

EDIT: rozwiazalem :D
jednak chodzilo o plik helper.php w katalogu mod_whosonline i tam w linijce 41, zeby nie liczylo osob bez pustego user agent trzeba dodac
&& eregi('s:22:"', $session->data)
kawalek kodu odpowiedzialnego za zliczanie:

if (count($sessions)) {
foreach ($sessions as $session) {
// if guest increase guest count by 1
if ($session->guest == 1 && !$session->usertype && eregi('s:22:"', $session->data)) {
$guest_array ++;
}
// if member increase member count by 1
if ($session->guest == 0) {
$user_array ++;
}
}
}

ps. w tabeli session w komorce data zapisywane sa rozne parametry, pod parametrem s:22:"........" kryje sie user agent. Jesli nie jest pusty, nie ma parametru s:22.

Dzięki bardzo za pomoce. Pozdrawiam

agappe
18-04-2010, 21:06
Niby jest coś tam z sesji. Ale nie mogę znaleźć interesującej mnie linijki. Dodawałem w różnych miejscach
if($_SERVER['HTTP_USER_AGENT']=='') return false;
ale niestety nic nie pomagalo ...