Stavo paciugando in questi giorni con un piccolo programmino di statistiche... l'idea è tenere sotto controllo, senza troppe pretese, le solite cose che interessano in caso di statistiche, senza utilizzare un prodotto gratuito con immagini invasive ed assolutamente non-fashion (:P) e senza dover pagare per averlo. E ovviamente, essendo hostato su server non conosciuti, senza avere accesso ai log della macchina.
In se, creare un programma semplice è un lavoro veloce di una mezza giornata, per conteggiare le classiche cose: accessi unici, pagine visitate, useragent, browser, referrer, etc etc.
Preso dalla smania, ho deciso di customizzarlo un pochetto, sai mai che poi ci scappa qualcosa di riutilizzabile, quindi ho creato la mia solita pagina aspx, che renderizza un'immagine vuota, che chiamata da un qualsiasi sito si occupa di conteggiare le statistiche, settare eventuali cookie (*) per il riconoscimento dell'utente unico, etc etc. Successivamente, l'idea è creare un controllo che faccia tutto...
Il problema è che, con questa metodologia, il mio Request.UrlReferrer diventa inutile, in quanto il chiamante della mia pagina/immagine è effettivamente la pagina che l'utente sta navigando, quindi mi perdevo il referrer vero, e mi sarei trovato la pagina chiamante uguale al referrer....
La soluzione che ho trovato? Il caro vecchio Javascript: il mio controllo renderizza insieme all'immagine uno script che prender il referrer (escape(document.referrer), attenzione che l'escape è importante per evitare casini) e lo passa in querystring alla mia pagina/immagine, che quindi può tranquillamente occuparsi del suo lavoro di conteggio con dati reali.
Si, è un problema banale... ma è sorprendente quanto possa passare inosservato finchè non ti serve :)
(*) ATTENZIONE: creare un programma di statistica "generico", cioè che possa essere usato da clienti diversi, ci espone a problemi di privacy. A partire da Internet Explorer 6, le impostazioni di default "bloccano" qualsasi cookie venga impostato da un sito esterno a quello che stiamo navigando (il classico occhio con il divieto di passaggio nella barra del vrowser) e questo da problemi nelcaso noi abbiamo uno sito di statistiche che si occupi di conteggiare le statistiche su differenti URL esterni.
Per fortuna, ci viene in aiuto il W3 che definisce, come al solito, gli standard per cui i browser possono accettare cookie anche provenienti da siti esterni a quello che stiamo navigando.
Tutto questo si traduce nel Platform for Privacy Preferences (P3P) Project (http://www.w3.org/P3P/) ... purtroppo i passi da fare non sono così immediati... in un prossimo post (se mi ricordo :P) spiegherò esattamente come procedere :)