que básicamente tienen algunas opciones:
1) Crear un único identificador único que es aparentemente al azar y lo almacenan en su base de datos con la que nombre de usuario corresponde a
2) Generar una contraseña aleatoria e incluyen la identificación de usuario y la contraseña en el enlace y almacenar la contraseña en la base de datos
3) Utilice una función hash unidireccional (md5, sah1, etc.) y un identificador secreto para encriptar el identificador de usuario. No tiene que almacenar el identificador de usuario cifrado en su base de datos.
La opción 1 es difícil porque tiene que preocuparse por verificar la base de datos para ver si la clave ya existe. Sin embargo, es bueno que la URL no contenga el nombre de usuario activado.
Si ya va a utilizar algún tipo de base de datos para almacenar la información del usuario (probablemente una contraseña como mínimo) en el futuro, puede ir con la opción 2. No se necesita mucho para agregar otra columna a tu base de datos Al enviar el correo electrónico, guarde el nombre de usuario y algo como $ key = sha1 (rand (1, 99999). $ Username) en otra columna para la fila que contiene el nombre de usuario. Luego haga que su enlace se vea así: http://you.com/activation.php?user= $ username & key = $ key. En activation.php, comprueba si la clave es igual al valor almacenado en la base de datos.
Si desea utilizar menos espacio de almacenamiento en su base de datos, la opción 3 funcionará. Puede usar algo como $ key = sha1 ($ mysecret. $ Username) como el identificador secreto. Use algo extraño que solo usted conoce como $ mysecret, como 'aaafj_my_secret_adfaf'. Use el mismo tipo de URL que en la opción 2.Sin embargo, como puede generar $ key solo en $ username, no necesita almacenarlo. Entonces, cuando está procesando en activation.php, simplemente verifique si sha1 ($ mysecret. $ _GET [username]) == $ _GET [key]. Si lo hace, sabrá que tiene el usuario correcto. Teóricamente, con suficientes registros, alguien podría calcular su valor para $ mysecret y generar también las claves de activación. Sin embargo, seguramente notaría los miles de millones o más de registros que tomaría antes de que pudieran comenzar a calcular cuál es. La cantidad de activaciones requeridas se basa en el tamaño de la clave de la función hash. Use sha1 (160 bit) vs md5 (128 bit) para que sea más difícil adivinar su valor de $ mysecret.
No hay posibilidad de colisión si agrega la identificación de usuario a la URL y comprueba que ambas coincidan. – Eli
@Eli, existe la posibilidad, ya que algunas colecciones de caracteres hacen hash con la misma cadena hash. Aunque la posibilidad es bastante insignificante (pero aún está allí). – alex
Ehh, no soy partidario de revelar información de la clave principal al usuario. Pero esa es una buena idea, Eli. entonces key = $ generatedKey & id = $ uid –