Estoy creando un sitio web PHP que involucra a los usuarios que se registran, y me pregunto cuáles son las mejores prácticas para los códigos de "confirmación de correo electrónico".Mejores prácticas para los códigos de confirmación de correo electrónico
Los nuevos usuarios deben confirmar sus direcciones de correo electrónico. Esto lo hago generando un código y enviándolo al usuario en un correo electrónico, que luego puede usar para activar su cuenta. En lugar de almacenar esta clave en una base de datos, estoy usando un poco de solución práctica: el código es el resultado de:
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
Donde $ sello de tiempo se refiere al tiempo fácil de creación. En general, estaba bastante satisfecho con esto, pero luego pensé: ¿es esto lo suficientemente seguro? ¿Y la posibilidad de colisiones? Y también necesito generar códigos para el restablecimiento de contraseñas, etc. Si utilicé una metodología similar, una colisión podría ocasionar que un usuario reinicie inadvertidamente la contraseña de otro usuario. Y eso no está bien.
Entonces, ¿cómo haces estas cosas? Mi pensamiento era una tabla con el siguiente formato:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
Donde 'tipo' sería de 1, 2 o 3 significado de "activación", "cambio de correo electrónico" o "restablecer contraseña". ¿Es esta una buena forma de hacerlo? ¿Tienes una mejor manera?
Usando un método similar al anterior, ¿podría eliminar automáticamente cualquier cosa que tenga más de dos días de antigüedad sin usar cron-jobs? Mi anfitrión (almostfreespeech.net) no los admite. Si es posible, me gustaría evitar tener un cron-job en un host externo que wget es un script que borra cosas, ya que eso es simplemente desordenado = P.
Gracias!
Mala
Actualización:
Para aclarar: Me he dado cuenta de la única manera de ir de forma segura acerca de esta tarea es mediante el uso de una base de datos, que es lo que la función original estaba tratando de evitar. Mi pregunta es cómo debería estructurarse la tabla (¿o las tablas?). Alguien sugirió que elimine el código PK y simplemente haga que el código sea PK. Entonces, en resumen, mi pregunta es: ¿es esto lo que haces?
¿La mejor práctica para los códigos de confirmación del correo electrónico? Déjelos fuera ... – Leo
Es importante que los usuarios tengan una dirección de correo electrónico válida en el archivo, aunque solo sea para restablecer la contraseña. Si bien uno podría decir "bueno, esa es la responsabilidad del usuario" este es el mundo real con el que nos enfrentamos ... En cuanto el primer chico que "NUNCA olvidará su contraseña" olvide su contraseña, probablemente una o dos semanas después, mi sistema será "el más tonto de todos". – Mala