Avatar billede bonden Nybegynder
23. august 2003 - 17:52 Der er 16 kommentarer og
1 løsning

Onlinebrugere ud fra sessions

Vores server kører med x antal sites.
Når brugere besøger sites'ne, oprettes der en session.
Hvis nu, jeg vil tælle antallet af onlinebrugere kun på et site, skal jeg kunne tælle antal sessions oprettet fra det ene site - og derfor skal jeg kunne identificere disse sessions på en eller anden måde.

Nogle, der har en god idé til hvordan det gøres - eller er det bare mig, der drømmer sjove drømme.....?;-)
Avatar billede jakoba Nybegynder
23. august 2003 - 17:55 #1
Hver session har et sessionid der er unikt. det kunne være en god nøgle :-))
Avatar billede jakoba Nybegynder
23. august 2003 - 17:57 #2
Avatar billede keysersoze Ekspert
23. august 2003 - 17:57 #3
umiddelbart lyder det som om du drømmer sjove drømme - session er unikke for hver brugere og kan ikke deles blandt brugere. Det ikke noget der kan bruges til at tælle antal online eller på anden måde "dele" informationer flere brugere imellem - så derfor skal du gemme de aktive brugere på en anden måde... applications eller database fx
Avatar billede detox Nybegynder
23. august 2003 - 18:01 #4
Prøv denne her:

<? session_start();?>
<html>
<head>
<title> Online brugere </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
define("MAX_IDLE_TIME", 3);

function getOnlineUsers() {
    if ($directory_handle = opendir(session_save_path())) {
    $count = 0;
    while (false !== ($file = readdir($directory_handle))) {
        if ($file != '.' && $file != '..') {
            if (time() - fileatime(session_save_path() . '\\' . $file) < MAX_IDLE_TIME * 60) {
                $count++;
                }
            }
        }
        closedir($directory_handle);
        return ($count);
    } else {
    return false;
}
}
echo 'Number of online users: ' . getOnlineUsers() . '<br>';
?>
</body>
</html>
Avatar billede Slettet bruger
23. august 2003 - 18:02 #5
keysersoze: Det kan man nu sagtens.

bonden: En god idé ville være at implementere din egen session håndtering. Med http://dk.php.net/manual/en/function.session-set-save-handler.php.

Der er flere tutorials rundt omkring på nettet, der vejleder i hvordan du gør dette. Jeg ville implementere det med en datasebase støttet løsning.

Så ville du let kunne tilknytte en information omkring, hvilken server (hvilket site), som den pågældende session var registreret under.

Endvidere vil du have fuldstændig styr på, hvor længe en session skulle være gyldig osv. osv.
Avatar billede jakoba Nybegynder
23. august 2003 - 18:06 #6
database tabel med 3 felter: tabellen er tilgængelig allevegnefra

sess  char    unique not null primary key,
site  char    not null,
tid    timedate,

hvergang en session startes eller genoptages sørger du så for at der i databasen ligger en record med den sessions session id, og nuværende tid.
hvis den findes i forvejen opdaterer du blot tiden. hvis den ikke findes opretter du den med 'nuværende site'.

din hvormange pr site bliver så til noget i retning af
    SELECT count(*)
    FROM tabellen
    WHERE  site = 'ønsket site'
      AND  now()-(15 minutter) < tid

mvh JakobA
Avatar billede detox Nybegynder
23. august 2003 - 18:12 #7
Mit eksempel skal så kombineres med session_save_path(), hvis du vil have oplysninger for det enkelte site. Lav en mappe til hver site og set save-path øverst i filen.
Avatar billede bonden Nybegynder
23. august 2003 - 18:15 #8
Prøver lige at dvæle lidt ved Jakoba's forslag.
Er lidt betænkelig ved at lave en db-løsning, da serveren til tider har rigeligt at lave og jeg derfor gerne vil belaste db'en så lidt som muligt, hvor det er muligt.

Så kom jeg til at tænke på, om ikke man i toppen af hver fil, kunne lægge en funktion, der går ind og opdaterer timestampet på brugerens id i db'en. I forvejen tjekkes der i toppen af hver fil, om brugeren findes.....
Så får jeg både om den enkelte bruger er online ved at tage senest opdaterede tid minus 10 minutter....og ved at lave en count på bruger-db'en får jeg også antal onlinebrugere......
Avatar billede bonden Nybegynder
23. august 2003 - 18:25 #9
Vender lige tilbage senere på aften, når jeg har fået det implementeret......
Avatar billede detox Nybegynder
23. august 2003 - 18:28 #10
Den hurtigste løsning er at tælle sessionfilerne, som du selv er inde på i dit indlæg.
Avatar billede bonden Nybegynder
23. august 2003 - 18:32 #11
Detox>>Jeps - men hvis jeg skal have dem kædet sammen med brugerne og få, hvem der er online, er jeg nok nødt til at køre det ind over db'en - og ved at lave en update sammen med et tjek, om brugeren er online, får jeg en minimal belastning af db'en......
Avatar billede keysersoze Ekspert
23. august 2003 - 18:36 #12
hov - havde vist misforstået spm :)
Avatar billede detox Nybegynder
23. august 2003 - 18:38 #13
Hvis du vil vide præcis, hvem der er på ja. Det er ikke sådan jeg forstod dit spørgsmål, der skriver kun du ud fra dine session's vil finde ud af hvor mange brugere der er online på det enkelte site.
Avatar billede detox Nybegynder
23. august 2003 - 18:40 #14
Der var min idé at lave en session_save_path for hver site og checke antal aktive session's i det aktuelle (eller for den sags skyld alle) site(s).
Avatar billede bonden Nybegynder
23. august 2003 - 18:43 #15
detox>>Jeps - men kom til at tænke lidt videre. Har det bedst med at være kreativ hele tiden;-) Så nej, det lagde ikke i mit oprindelige spørgsmål - men det var en mulighed, der lige pludseligt opstod......
Avatar billede detox Nybegynder
23. august 2003 - 18:52 #16
bonden -> Det er også sådan det skal være. Det kunne jo ske, de nye idéer er bedre end de oprindelige ;-)
Avatar billede bonden Nybegynder
24. august 2003 - 09:10 #17
Det virker helt kanon med en funktion i toppen af filerne, der opdaterer timestampet. Så har jeg både hvem der er online og hvor mange, der er online.
Når jeg skal vise, hvem der er online, laver jeg en optælling på, hvor mange, der har en timestamp, der er nyere end 500 sekunder.
Overvejer kun at opdatere timestampet hvert 3. minut - idet den jo henter timestampet i toppen af hver fil. Går jeg nu ind og siger, at hvis timestampet er fornyet inden for de seneste 3 minutter, skal den ikke opdatere, sparer jeg lidt på db-aktiviteten også.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester