Purtroppo il Mac Address ha un potenziale problema: i router non girano i mac address dei client fuori dalla subnet in cui lavorano.
Con l'uso del protocollo
ARP è possibile risalire al mac address di un determinato IP, ma l'ip a disposizione sarebbe soltanto l'ultimo ip pubblico coinvolto nella comunicazione dal dispositivo verso l'esterno della rete in cui si trova, e il protocollo ARP è valido solo all'interno della sottorete in cui si trova il dispositivo che possiede quell'IP pubblico.
Se la tua applicazione deve essere usata da iPhone
e da PC, allora i PC potrebbero essere soggetti a questo problema a seconda della conformazione della rete in cui si trovano. Se c'è un router di mezzo il problema di pone.
Forse la soluzione migliore potrebbe essere quella di battezzare ogni dispositivo con un cookie del browser.
Se alla connessione dell'utente il cookie è assente allora lo crei e lo memorizzi anche nel database assieme all'username. A questo punto hai una coppia username-cookie che puoi verificare e che è valida solo su quel browser.
Non è molto diverso dal mac address, ma più semplice da ottenere e funzionante in qualunque configurazione di rete.
Per creare un identificatore univoco puoi usare
DocIDToGUID(
NewDocID()), che ti torna un bel GUID di 36 caratteri univoco per sempre.
L'unico inconveniente si manifesta quando l'utente decide di svuotare la cache del browser. Ma in questo caso puoi semplicemente prevedere un controllo a tempo dall'ultima connessione valida. Se un certo username si collega senza più cookie e dopo più di un giorno dall'ultima connessione valida, allora puoi semplicemente ricreare il cookie e aggiornare i dati sul db.
Qualcosa del genere, che ne dici?