Esistono diverse procedure per creare un script PHP con cui contare il numero di utenti on line su una determinata pagina Web o su un sito
Nel corso di questa trattazione verrà proposto un esempio basato sull'utilizzo combinato di MySQL per l'archiviazione dei dati e delle sessioni per la memorizzazione degli accessi in modo univoco.
La struttura del database
La realizzazione di un un'applicazione destinata al conteggio e alla visualizzazione del numero di utenti on line richiederà:
- un database, chiamato per esempio statistiche
- un file, chiamato ad esempio config.php
- un file con il codice per il conteggio degli utenti, per la stampa a video dei risultati e per la cancellazione dei record obsoleti (chiamato ad esempio utenti_on_line.php
In pratica il database verrà utilizzato per memorizzare le informazioni relative agli utenti, il file di configurazione permetterà all'applicazione di interagire con MySQL e il file dello script si occuperà di restituire in output i dati riguardanti gli utenti online in uno specifico intervallo di tempo; una volta superato questo intervallo le informazioni relative ad una sessione verranno cancellate in quanto obsolete.
All'interno del database statistiche sarà presente una sola tabella, chiamata ad esempio utenti_on_line, essa dovrà contenere 3 campi:
- un campo
id
- un campo
sessione
session_id()
- un ultimo campo chiamato
timestamp
timestamp
Di seguito verrà proposto l'SQL necessario per la creazione della tabella e dei relativi campi:
CREATE TABLE `utenti_on_line` ( `id` int(11) NOT NULL auto_increment, `sessione` varchar(50) NOT NULL, `timestamp` int(11) default '0', PRIMARY KEY (`id`) );
In realtà il campo id
non è fondamentale per il funzionamento dell'applicazione, è stato comunque introdotto per correttezza formale e perché potrebbe tornare utile nel caso in cui si desideri contare il numero di record memorizzati dallo script nel corso del suo funzionamento. Il tipo di dato TIMESTAMP
è supportato nativamente da MySQL, in alternativa è quindi possibile lasciare che sia il DBMS a registrarlo impostando come valore predefinito il CURRENT_TIMESTAMP
.
I file dell'applicazione
Un volta creato e strutturato il database, il prossimo passaggio sarà quello di creare un semplice file di configurazione con i parametri necessari per la connessione al DBMS e per la selezione del database; per far questo sarà possibile definire una classe, come quella descritta nell'esempio seguente, che potrà essere salvata in un file config.php per l'inclusione:
<?php class MySQL { function MySQL() { # hostname di MySQL # nome utente per la connessione # password dell'utente # nome del database # connessione al DBMS # selezione del database # istanza della classe
Fatto questo si potrà passare alla fase che concerne la creazione del cuore dell'applicazione: il file che fungerà da contatore, da visualizzatore e da gestore degli utenti.
<?php # inizializzazione della sessione # creazione dell'identificatore di sessione # memorizzazione in variabile del momento di connessione # definizione dell'intervallo di tempo valido per l'utente connesso # inclusione del file di configurazione # confronto tra identificatore di sessione e dati in tabella # se l'identificatore non è presente viene creato un nuovo record # se l'identificatore è già presente viene aggiornato il # valore relativo al momento di connessione # estrazione dei record presenti in tabella per il conteggio # stampa a video del conteggio # cancellazione dei record obsoleti # chiusura della connessione
In pratica l'applicazione registra un identificatore per ogni sessione inizializzata dall'accesso di un utente, se questo identificatore non è presente nella tabella viene aggiunto, se esso è invece già presente viene aggiornato il dato relativo al momento del suo accesso; nel caso in cui il momento di accesso di un utente sia inferiore al timestamp ottenuto sottraendo 5 minuti (300 secondi) dal risultato della funzione time(), il record corrispondente verrà eliminato considerando l'utente non più online.