PHP/Mail/MySQL:注册的电子邮件确认

Ron*_* Ng 4 php mysql email

我不熟悉PHP/MySQL和电子邮件.而且我很确定这个问题已经在某个地方被问过了,但我找不到了.如果这令人不安,我很抱歉,并提前感谢你!

在将用户添加到数据库之前,是否可以做一些用户必须先点击电子邮件中的链接?

而且你知道,对于某些网站,他们为每个电子邮件验证都有一个独特的网址(图中红色显示)?他们如何为每封电子邮件创建独特的网页?


图片记入:https://kayako.atlassian.net/wiki/download/attachments/5734920/subs-validation.png? version = 1& modificationDate = 1291956283000 & api = v2


在此输入图像描述

非常感谢你的关注!如果可能的话,我更喜欢没有直接的脚本我可以复制和粘贴,因为我想找出自己:P但请给我一些提示,因为我完全迷失了.

如果有什么不清楚的地方,请告诉我,我会尽力澄清它!

Bee*_*ice 5

注册过程

  1. 用户在线填写表格,其中包含电子邮件和密码等基本详细信息,并将表格提交至 register.php

  2. register.php将用户信息添加到临时位置,例如pending_users包含用户提交的所有字段expiration以及activation_code字段的表.此代码可以是任意随机,无法猜测的值.例如:hash('sha1', mt_rand(10000,99999).md_rand(10000,99999)).只是不做任何可预测的事情,例如哈希当前时间或用户名

  3. register.php向用户发送一封电子邮件activate.php,其中包含将链接到的URL,其中包含激活码.例如:example.com/activate.php?code=a2ef24...电子邮件还应通知用户过期(1至12小时有效期对我来说似乎没问题)

  4. 当用户单击该链接时,她会触发GET请求activate.php.在这样做时,用户证明了电子邮件地址的所有权

  5. activate.php从请求参数中获取代码,例如:$code=$_GET['code'].使用该代码,脚本会在pending_users表中查询与该代码匹配的记录.

  6. 如果找到代码,请在继续之前检查它是否已过期.过期会阻止其他人在很久以后进入用户的帐户完成注册.

  7. 如果代码有效,请从匹配记录中捕获用户详细信息,并从pending_users表中删除该记录.

  8. 在常规users表中写一个匹配的记录.在此之前,用户无法登录,因为登录脚本仅检查users表,并忽略该pending_users表.

  9. 注册完成.

安全说明I:

为了保护用户,请勿以明文形式存储密码.当您从注册表中收到时(例如:$_POST['pwd'],执行:

$pwd = $_POST['pwd'];

//first validate; it should meet minimum requirements

$pwd_hash = password_hash($pwd, PASSWORD_DEFAULT); // <- the hash gets stored
Run Code Online (Sandbox Code Playgroud)

稍后,要验证密码,请执行以下操作:

password_verify($cleartext_pwd, $pwd_hash);
Run Code Online (Sandbox Code Playgroud)

true如果密码正确,它将返回; false除此以外.

安全说明二:

为了保护您的安全,请不要直接在数据库查询中插入用户提供的值.这意味着从外部到达的任何值.不仅仅是用户名,电子邮件,密码......还包括您从用户那里获得的值,例如activation_code上面的值或cookie值或标题(例如User-Agent).相反,学习使用预准备语句.这将保护您免受SQL注入.