Alla fine ce l'ho fatta. Non è una soluzione ottimale al 100% perchè se per utopia ci fossero un milione di utenti loggati al sito la pagina rallenterebbe molto, dato che bisogna scorrere tutti i records degli utenti loggati. Neppure in termini di sicurezza non è ottimale, me ne rendo conto, perchè poi bisogna stare bene attenti a quello che si fa fare agli utenti una volta che si sono riconosciuti.
Comunque la soluzione che ho trovato è la seguente.
Ho notato che Joomla crea dei cookie durante il login, uno che vale per il login al backend ed uno per quello al frontend, che è quello che mi interessa. Vengono create anche dei dati di sessione ma non sono accessibili dall'esterno, mentre i cookie sì.
Il problema è che la chiave del cookie che contiene l'id di sessione è criptata, ed anche se ho notato che con due browser differenti il codice alfanumerico è lo stesso, credo che cambi da un computer all'altro altrimenti non servirebbe criptarla. Quindi il cookie che contiene l'id non si può richiamare direttamente perchè non si conosce il suo nome. Però $_COOKIE è un array che contiene tutti i cookie registrati, quindi è sufficiente scorrere i records della tabella jos_session e verificare che il valore nel campo session_id sia all'interno dell'array $_COOKIE e l'utente non può essere che quello.
Il codice è questo:
require_once '../../configuration.php';
$conf = new JConfig;
$conn = mysql_connect($conf->host, $conf->user, $conf->password) or die('Could not connect to the database; ' . mysql_error());
mysql_select_db($conf->db, $conn) or die('Could not select database; ' . mysql_error());
$sql = "SELECT * FROM jos_session WHERE guest=0";
$result = mysql_query($sql, $conn) or die('Could not look up user information; ' . mysql_error());
while ($row = mysql_fetch_row($result)) {
if(in_array($row[0],$_COOKIE) && !$row[1]) {
$session_id=$row[0];
$user_id=$row[5];
$username=$row[6];
}
}
echo $session_id."[br /]";
echo $user_id."[br /]";
echo $username."[br /]";
L'ho verificato e funziona, riconosce anche quando mi disconnetto.