我正在尝试创建一个用户注册到我的网站的小系统,他们会收到其中一个电子邮件,其中包含一个链接,用户可以点击这些电子邮件来激活他们的帐户.
到目前为止,我正在考虑采用以下方式:
>用户注册并按提交.
>创建一个长随机字符串,并将其放入数据库中,以防止这个新的“非活动”帐户.
>电子邮件将发送到用户提供的地址,其中包含指向“www.mysite.com/userclass/validationmethod/user@email.com/3423frqfafkop2341o43”的链接.最后一位是验证码.
>用户单击该链接.
>电子邮件和代码与刚刚创建的帐户匹配.该帐户已标记为已验证/有效.
>存储在数据库中的验证代码被删除或标记为已使用?
你对此有何看法?这是最好的方法吗?作为一个额外的问题,我是否需要对该电子邮件地址进行urlencode?
我已经使用以下似乎运作良好的.只需要添加数据库函数,它就是排序的:
public function verifyAccount($vCode, $email) {
$email = urldecode($email);
if($userId = $this->model->userIdByEmail($email))
{
$actualCode = $this->model->getUsersVerificationCodes('code', 'userId', $userId);
if($actualCode != $vCode)
{
$output = 'Invalid code or email.';
} else {
$output = 'Success!';
}
} else {
$output = 'Invalid code or email.';
}
echo $output;
}
解决方法:
看起来很好,我也会这样做.但我不会在链接中使用电子邮件.使用这样的东西:
mysite.com/confirm_email/749c71f6a29220a3ec168df
编辑:我认为你不需要对电子邮件进行urlencode,但是当你这样做时,它可能更容易处理地址.
我认为另一种可能的选择是:
mysite.com?email=urlencoded_email\u0026amp;confirm=u34h23ui4h234取决于您处理url参数的方式.