io personalmente ho risolto così:

- pagina con il form richiesta di registrazione

- pagina che legge i dati inviati ( comunica eventuali errori all'utente; inserisce l'utente nel database settando il campo 'convalidato' = 0 e il campo 'codice_convalidazione' = <codice>; invia una mail ); ho generato il <codice> concatenando l'ip dell'utente senza puntini, con il risultato della funzione time() e un numero random di 7 cifre

- la mail contiene un messaggio di benvenuto e il link da cliccare, con il <codice> appeso all'url

- il link punta alla pagina di convalida della registrazione, la quale legge il <codice> appeso all'url e setta il campo 'convalidato' = 1 all'utente nel database caratterizzato da quel <codice>

- da questo momento in poi l'utente e' abilitato a loggarsi

--------------------------
spero che ti sia utile, e spero che sia utile anche a me, per scoprire come migliorare questo meccanismo che ritengo rozzo