Qualcuno sa dirmi come posso sapere in php gli utenti attualmente loggati nel mio sito?
Qualcuno sa dirmi come posso sapere in php gli utenti attualmente loggati nel mio sito?
una soluzione potrebbe essere creare una tabella mysql che salvi ip, ora dell'ultimo click dell'utente. Se invece gli utenti sono registrati potresti pensare anche ad implementare la tabella con eventuali nick o userid... Vedi un po' tu...
Questa e' la mia firma! Lo so, e' una mezza schifezza.![]()
Un sito
- skype non è per consulenze online -
Se vuoi ho uno scriptino pronto che si appoggia a file TXT.
In ogni caso si tratta di registrare quante sessioni sono partite e cancellarle se risultano scadute.Codice PHP:
<?
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////// FUNCTIONS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function chk_session($file)
{
$sid = session_id();
$a = file($file);
$content = $a[0];
$content = substr($content, 0, strlen($content));
$b = explode("-", $content);
$found = 0;
for($i=0;$i<count($b);$i++)
{
list($fsid, $ftime) = explode(",", $b[$i]);
if($fsid == $sid)
{
$b[$i] = $sid.",".time();
$found = 1;
}
if(!chk_session_time($ftime))
{
unset($b[$i]);
}
}
if($found == 1)
{
$rs = @fopen($file, "w+");
$content = implode("-", $b);
fwrite($rs, $content);
return true;
}
else
{
return false;
}
}
function add_session($file)
{
$rs = @fopen($file, "a");
$a = file($file);
if(count($a) == 0)
fwrite($rs, session_id().",".time());
else
fwrite($rs, "-".session_id().",".time());
}
function chk_session_time($time)
{
$timeouts = 180;
$timeout = time() - $timeouts;
if($time < $timeout)
return false;
else
return true;
}
function chk_session_number($file)
{
$a = file($file);
$content = $a[0];
$b = explode("-", $content);
$n = count($b);
return $n;
}
function chk_session_file($file)
{
if(!file_exists($file))
{
if(!fopen($file, "w+"))
echo "Si è verificato un errore durante la creazione del file. Verificare i diritti di scrittura.";
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// END FUNCTIONS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(!session_id()) { session_start(); } // faccio partire la sessione nel caso non fosse gia' attiva
$filename = "./session.txt"; // definisco con che nome e dove salvare il file txt
chk_session_file($filename); // controllo che il file esista altrimenti mi assicuro di crearlo
if(!chk_session($filename)) // controllo se la sessione è presente. In caso la aggiungo alla lista (nel frattempo elimino quelle scadute)
{
add_session($filename); // aggiungo la sessione alla lista
}
echo chk_session_number($filename)." utenti stanno visitando il sito"; // stampo quante sessioni sono attive al momento.
?>
![]()
eheheh io e il drugo stiamo guardando le stesse conversazioni
eheheh lui te l'ha proposto su file invece![]()
Questa e' la mia firma! Lo so, e' una mezza schifezza.![]()
Un sito
- skype non è per consulenze online -
ehehe si.
Cmq nonostante lo script che ho postato, ovviamente appoggio la soluzione su database, come detto da iraiscoming223.
![]()
puoi creare una tabella di appoggio chiamata per esempio
user_online
e crei una pagina di login, ovviamente devi mettere la stringa di connessionecodice:CREATE TABLE `user_online` ( `IDuser` int(10) unsigned NOT NULL auto_increment, `IDsession` varchar(255) NOT NULL default '0', `stato` text NOT NULL, `user` varchar(45) NOT NULL default '0', `data` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`IDuser`) ) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=latin1 AUTO_INCREMENT=49 ;
$conn = mysql_conn ...
questo è uno script che gia avevo fatto, lo devi personalizzare!codice://starto la session session_start(); //pulisco la tabella nel caso l' utente non abbia eseguito correttamente il logout mysql_select_db($database_conn, $conn); $data = date("Y-m-d"); $pulisco = "DELETE FROM user_online WHERE data < '$data'"; mysql_query($pulisco, $conn) or die(mysql_error()); //autenticazione e creazione var di sessione $user = $_REQUEST['username']; $pass = $_REQUEST['password']; //controllo e autorizzo mysql_select_db($database_conn, $conn); $query_login = "SELECT count(user) as controllo FROM user WHERE user = '$user' AND pass = '$pass' and attivo = 'Y'"; $login = mysql_query($query_login, $conn) or die(mysql_error()); $row_login = mysql_fetch_assoc($login); $totalRows_login = mysql_num_rows($login); if($row_login['controllo'] == 1) { //controllo e autorizzo mysql_select_db($database_conn, $conn); $query_welcome = "SELECT IDuser, alias, sesso FROM user WHERE user = '$user' AND pass = '$pass'"; $welcome = mysql_query($query_welcome, $conn) or die(mysql_error()); $row_welcome = mysql_fetch_assoc($welcome); $totalRows_welcome = mysql_num_rows($welcome); $_SESSION['login'] = $user; $_SESSION['IDuser'] = $row_welcome['IDuser']; $IDs = session_id(); $data_login = date("Y/m/d"); //scrivo l' accesso nella tabella USER ONLINE $insertSQL = "INSERT INTO user_online (IDsession, stato, user, data) VALUES ('$IDs', 'OnLine', '$user', '$data_login')"; mysql_select_db($database_conn, $conn); $Result1 = mysql_query($insertSQL, $conn) or die(mysql_error()); } else { $result = "Le credenziali di accesso fornite non sono corrette o non hai ancora attivato il tuo account. Non sei registrato?? Clicca qui!" ; }
ciao!
Fabio![]()
Ma mi sembrano soluzioni che non danno una verifica sicura degli utenti on-line, non c'è modo di reperire il tracciato di un utente da server in modo da capire se è ancora presente?
uhm? Lo script che ti ho postato controlla la presenza dell'utente...la registra...e se resta inattivo per più di 30 secondi lo cancella...
Più veritiero di cosi![]()
si fa quel che si puo![]()