Ottime osservazioni, ma su entrambe ho scelto diversamente per un motivo preciso.
Rigenerazione a mezzanotte vs finestra scorrevole: con una finestra che si rinnova ad ogni visita, un utente molto attivo non resetterebbe mai il codice, diventerebbe di fatto un identificatore permanente, l'opposto di quello che voglio. Il reset a mezzanotte perde un po' di continuità nella sessione, ma garantisce che nessuno sia seguibile nel tempo, nemmeno i visitatori più abituali.
Hash del browser abbinato all'IP: qui il rischio è che user-agent + IP combinati sono il primo passo verso il fingerprinting del dispositivo, la tecnica che ho scelto di evitare fin dall'inizio (per questo salvo solo categorie larghe come "desktop/mobile/tablet", mai lo user-agent per intero). Più segnali combini, più quel codice diventa specifico per un dispositivo, e la differenza con un cookie di tracciamento si assottiglia.
Quindi il limite che hai notato (IP condivisi contati come una persona) lo accetto consapevolmente: è il prezzo di non fare fingerprinting, non un difetto da correggere.
Mi fai venire un'idea, però: mostrare in dashboard quanto spesso capitano IP condivisi
(una stima indiretta, tipo troppe pagine viste in un'ora dallo stesso codice, o pattern di navigazione scorrelati tra loro, non una certezza, dato che l'IP reale non lo salvo mai), come dato informativo, senza cambiare come vengono contati.
Ci penso, grazie dello spunto.