Vorrei progettare un contatore visite in PHP + SQL ma mi chiedevo come posso gestire il fatto che le visite siano "uniche"...
Vorrei progettare un contatore visite in PHP + SQL ma mi chiedevo come posso gestire il fatto che le visite siano "uniche"...
PHP-Fusion setta un cookie alla prima visita e alla successiva visita ricontrolla se esiste per mettere un +1 al contatore o meno, comunque se si cancellano i cookie o se non li si accettano viene contata un'altra visita. L'unico metodo che siano davvero uniche è quello di salvare gli IP di chi viene e controllare ogni volta che non ci siano per poter aggiungere un +1 al contatore, ma comunque ti riempirebbe il database in poco tempo se ne ricevi molte.
E nemmeno l'ip ti assicura che non sia la stessa persona su un altro computer, o sullo stesso computer collegato da un altro posto.
Ma i contatori di visite "famosi" (non so se posso fare nomi) quale di questi due criteri usano?
Ok, ho deciso di effettuare il controllo sull'ip.
Se un ip visita due volte il sito con nell'arco di 24 ore viene conteggiato una solta volta.
Come posso progettare il tutto? Al caricamento di ogni pagina devo eseguire una query per verificare se la visita è "nuova" e in caso registrarla?
Se può esserti utile, nel mio attuale sito avevo fatto una cosa simile: salvo tutte le visite e le visite uniche (queste ultime, più dettagliate):
...anche se probabilmente adesso lo farei un po' differente, comunque può darti un inputCodice PHP:
function visita()
{
$sq = sqlite_open("./database.db", 0666, $sqlite_error);
if(!$sq)
die("Errore Sqlite: ".$sqlite_error);
$query = 'INSERT INTO visite (ip, timestamp) VALUES (\''.$_SERVER['REMOTE_ADDR'].'\',\''.time().'\')';
debug($query);
if(!(sqlite_query($sq,$query,SQLITE_BOTH,$sqlite_error))) #,SQLITE_BOTH,$sqlite_error
{
sqlite_close($sq);
die("Errore query: ".$sqlite_error);
}
$query = 'SELECT id FROM visite_uniche WHERE ip=\''.$_SERVER['REMOTE_ADDR'].'\' AND timestamp > \''.mktime(0,0,0).'\'';
debug($query);
if(!($query = sqlite_query($sq,$query,SQLITE_BOTH,$sqlite_error)))#,SQLITE_BOTH,$sqlite_error
{
sqlite_close($sq);
die("Errore query: ".$sqlite_error);
}
if(!sqlite_num_rows ($query))
{
$query = 'INSERT INTO visite_uniche (ip, timestamp, so, browser,url_provenienza) VALUES (\''.$_SERVER['REMOTE_ADDR'].'\',\''.time().'\',\''.OS().'\',\''.browser().'\',\''.$_SERVER["HTTP_REFERER"].'\')';
debug($query);
if(!(sqlite_query($sq,$query,SQLITE_BOTH,$sqlite_error)))#,SQLITE_BOTH,$sqlite_error
{
sqlite_close($sq);
die("Errore query: ".$sqlite_error);
}
}
sqlite_close($sq);
}
ah, nota che ho usato sqlite, e non mysql... ma tanto sql è comunque sql
Ciao!
Ultima modifica di alemoppo : 11-09-2012 alle ore 15.19.43
regolamento altervista_______________ regolamento forum
Ma quindi ogni volta che un utente visita una pagina viene eseguita questa funzione con le query annesse? Se l'utente clicca un link viene rieseguita ogni volta?