PDA

Volledige versie bekijken : aantal actieve gebruikers [php]


Flashingback
%Europe/Berlin %882 %2005, 22:10
Ik heb even een klein vraagje. Hoe werkt bijvoorbeeld op dit forum onderaan dat aantal actieve gebruikers systeem. Is het zo dat in een loopje het IP wordt doorgestuurd of is er een andere manier want ik denk dat dit misschien wel veel bandbreedte verbruikt.

Edwin
%Europe/Berlin %960 %2005, 00:03
Ik snap niet helemaal wat je bedoelt. Maar ik heb ooit eens zoiets gemaakt door het ip adres op te slaan in een database met de tijd erbij. Vervolgens laad je alle ip adressen uit de database van de afgelopen 5 minuten ofzo en dat zijn dan het aantal online gebruikers. En dit kan je dan ook weer koppelen aan je gebruikerstabel e.d.

Voetsjoeba
%Europe/Berlin %276 %2005, 07:37
In een database heb je een tabel die alle data opslaat, dus bv ip en de laatste actieve moment. Op elke pagina zet je dan een script dat ...

1) Elke gebruiker identificeert adhv zijn IP adres. Als die user nog niet in de tabel aanwezig is, voeg je hem in (dus zijn ip en de timestamp van zijn laatste activiteitsmoment (nu dus)). Als hij er al in is, dan update je enkel zijn laatste activiteitsmoment (ook nu).

2) Alle gebruikers die voor de laatste 5 minuten niet meer actief geweest zijn, uit de tabel verwijdert. Als een gebruiker dan bv weggaat van de site, zullen de 5 minuten om zijn, en zal door middel van de pageviews die andere mensen uitvoeren, hij uit de db verwijderd worden.

Elke pageview update de tabel dus.

Edwin
%Europe/Berlin %296 %2005, 08:06
of je maakt een sessie aan en gebruikt het sessie-id ipv ip, dit zodat je meerdere computers per ip kan onderscheiden

Flashingback
%Europe/Berlin %345 %2005, 09:16
Owk bedankt voor de goede uitleg ik zal is zien wat ik er kan van maken.

Cowerd
%Europe/Berlin %357 %2005, 09:34
Maar dat van die sessie id snap ik niet helemaal.. leg dat eens verder uit?:)

Flashingback
%Europe/Berlin %485 %2005, 12:39
Een sesie id is gewoon zoiets als een Ip maar dan nog specifieker aangezien meerdere computers in 1 netwerk hetzelfde ip adres hebben en die sesie id kijkt naar de computer zelf en niet de groep.

brossiekoppie
%Europe/Berlin %633 %2005, 16:12
Ik heb hier nog een vrij goede class voor

<?php
class usersOnline {

var $timeout = 600;
var $count = 0;

function usersOnline () {
$this->timestamp = time();
$this->ip = $this->ipCheck();
$this->new_user();
$this->delete_user();
$this->count_users();
}

function ipCheck() {

if (getenv('HTTP_CLIENT_IP')) {
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED')) {
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR')) {
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED')) {
$ip = getenv('HTTP_FORWARDED');
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}

function new_user() {
$insert = mysql_query ("INSERT INTO useronline(timestamp, ip) VALUES ('$this->timestamp', '$this->ip')");
}

function delete_user() {
$delete = mysql_query ("DELETE FROM useronline WHERE timestamp < ($this->timestamp - $this->timeout)");
}

function count_users() {
$count = mysql_num_rows ( mysql_query("SELECT DISTINCT ip FROM useronline"));
return $count;
}

}
?>

Cowerd
%Europe/Berlin %842 %2005, 21:13
Een sesie id is gewoon zoiets als een Ip maar dan nog specifieker aangezien meerdere computers in 1 netwerk hetzelfde ip adres hebben en die sesie id kijkt naar de computer zelf en niet de groep.


wat een sessie id is weet ik wel.. maar hoe sla je die op dan..? (dus hoe vraag je het sessie id aan?)

brossiekoppie
%Europe/Berlin %546 %2005, 14:07
wat een sessie id is weet ik wel.. maar hoe sla je die op dan..? (dus hoe vraag je het sessie id aan?)


Door bovenaan je php document de sessie te starten met (hoe kon het ook anders) de functie <?php session_start(); ?> Deze functie hoeft hier geen parameters.

Let wel, het is zoals de header functie, er mag geen output komen voor deze functie of je krijgt een foutmelding.

Eens de sessie dan gestart is kan je sessie-variabelen aanmaken en ophalen.

Cowerd
%Europe/Berlin %579 %2005, 14:54
Ja ik weet al die dingen van php wel.. maar hoe krijg je die sessie_id in een variabele?
$sessie = session_start();
natuurlijk niet..

maar hoe dan?

brossiekoppie
%Europe/Berlin %360 %2005, 09:39
Sorry had je vraag niet goed begrepen...

Je zat er met jouw poging alleszins niet erg ver van. Je hebt namelijk de functie session_id();

En dan als volgt...


if(session_id() == "")
{
start_session();
}
else
{
echo ('dit is je sessie id: '.session_id());
}


Heb het zelf nog niet getest maar 't zou moeten werken