2010-01-06 24 views
6

¿Qué debo hacer para verificar si un correo electrónico existe en realidad? No entiendo cómo lo hacen los sitios para enviar correos con un enlace único que los usuarios hacen clic para validar que él es el propietario del correo electrónico =Enviar correo electrónico de activación al usuario

Crea 2 nuevas columnas llamadas activationkey y activa y almacena algunas cadenas aleatorias, envía un correo electrónico con la clave de activación, y actualice los usuarios activados = 1 que coincida con ese enlace de activación

register.php?a=activate&key=9cdfb439c7876e703e307864c9167a15 

¿Alguna idea mejor?

Respuesta

16

En general, envío un enlace que contiene el ID de usuario y la clave de activación. Cuando visitan mi script de activación, si encuentro una coincidencia, los activo.

Cuando se registren, generaré tal vez 32 caracteres alfanuméricos de mayúsculas/minúsculas y lo estableceré como la clave de activación. En este punto, puede crear un campo llamado 'activado', o puede suponer que el usuario no está activado si tienen una clave de activación.

 
uid |  email  | key 
------------------------------------------------------------ 
001 | [email protected] | e09141f3f5a17fed6222fc0279b9afdf 
------------------------------------------------------------ 
002 | [email protected] | 
------------------------------------------------------------ 

Cuando el usuario accede a la secuencia de comandos de activación, basta con comprobar si la llave suministrada junto con la identificación proporcionada y si se encuentra una coincidencia, borrar la clave del registro de usuario en el archivo (o actualizar su booleano 'activado' campo) y abre las puertas.

Si la dirección de correo electrónico proporcionada no existe, no hay pérdida. Puede eliminar rutinariamente todas las filas con claves después de un mes de inactividad.

+0

nice! ¡muchas gracias! Por cierto, para generar una clave, ¿cree que md5 (uniqid()); ¿estará bien? no quiero 2 usuarios con la misma clave: P – Martin

+1

md5 del mismo uniqid seguirá siendo el mismo; puedes usar el prefijo (tal vez el md5 de su correo electrónico) para uniqid, o usar la bandera 'más entropía' de uniq id – eCaroth

+2

smart . Creo que iré con md5 (correo electrónico); thx – Martin

0

No hay una manera fácil de verificar si un correo electrónico existe realmente por programación. Hay algunas formas (haciendo ping al servidor de correo, etc.) pero ninguna que funcione con la configuración de cada servidor de correo. Obligar al usuario a activar su cuenta a través de un enlace como el que describió es la mejor manera de hacerlo. Además, es posible que desee tener algún tipo de secuencia de comandos recurrente, como un trabajo cron que elimina los miembros no activados después de un cierto período de tiempo (lo que requeriría otra columna en su tabla, marca de tiempo).

Esto es útil porque si un usuario se registra pero nunca activa su cuenta y borra el correo electrónico, y está usando su correo electrónico como identificación (solo un ejemplo), nunca podrá completar la activación. Alternativamente, si intentan iniciar sesión, simplemente puede volver a enviar el correo electrónico de activación a esa dirección nuevamente.

Solo asegúrese de que en el correo electrónico está especificando todos los encabezados (respuesta, desde, etc.) para que su correo electrónico no se marque como spam.

+0

Este método para verificar si existe un correo electrónico no es infalible. No garantiza que el correo electrónico pertenezca al usuario. Existen servicios de correo desechables, donde obtiene una dirección de correo electrónico temporal. El usuario puede usar uno de esos servicios, activar su cuenta e iniciar sesión en el sistema.Después de un tiempo, la dirección temporal se desactiva. –

2

Una alternativa a las claves de activación es simplemente enviar una contraseña generada al correo electrónico del usuario, si el usuario inicia sesión se activa (y, por supuesto, debería poder cambiar la contraseña a su preferencia).

Cuestiones relacionadas