PHP电子邮件validation链接最简单的方法
我的网站上已经有一个高级用户login/注册系统( colemansystems.psm2.co.uk )。 但是,我希望有一封电子邮件发送给新用户,以validation他们的电子邮件地址。 如果他们没有点击链接,他们将无法访问他们的帐户。 我对PHP和MySQL有半熟练的经验,所以请深入解释一下。
编辑:我用于verify.php
文件的代码(用户点击一个GET(例如, verify.php?d=51773199320
)的链接)
$secret = $_GET['d']; $result = mysql_query("SELECT valid FROM users WHERE secret=$secret"); while ($row = mysql_fetch_array($result)) { $valid = $row['valid']; } if ($valid == "") { echo"There seems to be a problem with the verification code.<br><br><br><br><br>"; } elseif ($valid == "1") { echo"Your account is already verified.<br><br><br><br><br>"; } else { mysql_query("UPDATE users SET valid = '1' WHERE secret=$secret"); echo "Thank you, your account is now verified and you are free to use the exclusive features!<br><br><br><br><br><br>"; }
这是安全的吗?
最简单的方法是不注册未经validation的用户。
询问他们一个电子邮件地址,并发送一个包含这个地址密码哈希链接的电子邮件。 收到此链接后,您可以开始注册过程。
像这样的东西
$secret = "35onoi2=-7#%g03kl"; $email = urlencode($_POST['email']); $hash = MD5($_POST['email'].$secret); $link = "http://example.com/register.php?email=$email&hash=$hash";
并在您的register.php
添加2个隐藏的领域的registry格 – 电子邮件和哈希,存储他们从GET接收到的值。
最后进行注册和检查,
if (md5($_POST['email'].$secret) == $_POST['hash']) { //Continue registration. }
最简单的人 – 用户,编码器,电脑? 你在做什么优化 – 按键的数量,代码的大小,用户体验?
最简单的代码可能是不安全的。 在发送信件之前,您应该检查电子邮件地址是否正确。
注册后创build一个哈希的string,并将其保存到临时用户表使用此代码将散列string发送到用户的电子邮件地址
if(isset($_POST['register'])) { $email_id=$_POST['email']; $pass=$_POST['password']; $code=substr(md5(mt_rand()),0,15); mysql_connect('localhost','root',''); mysql_select_db('sample'); $insert=mysql_query("insert into verify values('','$email','$pass','$code')"); $db_id=mysql_insert_id(); $message = "Your Activation Code is ".$code.""; $to=$email; $subject="Activation Code For Talkerscode.com"; $from = 'your email'; $body='Your Activation Code is '.$code.' Please Click On This link <a href="verification.php">Verify.php?id='.$db_id.'&code='.$code.'</a>to activate your account.'; $headers = "From:".$from; mail($to,$subject,$body,$headers); echo "An Activation Code Is Sent To You Check You Emails"; }
之后创build一个validation页面,然后
if(isset($_GET['id']) && isset($_GET['code'])) { $id=$_GET['id']; $code=$_GET['id']; mysql_connect('localhost','root',''); mysql_select_db('sample'); $select=mysql_query("select email,password from verify where id='$id' and code='$code'"); if(mysql_num_rows($select)==1) { while($row=mysql_fetch_array($select)) { $email=$row['email']; $password=$row['password']; } $insert_user=mysql_query("insert into verified_user values('','$email','$password')"); $delete=mysql_query("delete from verify where id='$id' and code='$code'"); } }
如果你有任何问题,这里是一个完整的教程http://talkerscode.com/webtricks/account-verification-system-through-email-using-php.php