/** * 找回密码页 */ public function retrieve_password() { $User = D("User"); $email = D("email"); if (empty($_POST)) { $this->display(); exit; } $username = trim($_POST['username']); $email_address = trim($_POST['email']); //校验用户名与邮箱是否匹配 $user_id = $User->where("username='******' AND email = '{$email_address}'")->getField('id'); if ($user_id) { $new_password = randpw(); $data['password'] = md5($new_password); $User->where("id={$user_id}")->save($data); $email->setting["timeout"] = 30; $email->setting["type"] = "retrieve_password"; $email->setting["user_id"] = $user_id; $email->setting["title"] = "TripEC找回密码"; $email->setting["code"] = rand_string(6, 5); $link = __HOST__ . U('register/retrieve_password', array("code" => $email->setting["code"], "username" => $username)); $email->setting["link"] = md5($link); $email->setting["content"] = "您已经选择通过邮箱修改了您的密码,新的密码是:" . $new_password . "。请妥善保管好您的新密码。" . "如果此操作并非处于您本人的意愿,请及时与本站工作人员联系,谢谢!"; if ($email->send($email_address, $email_address, "", "", $return)) { $this->display("retrieved_password"); } else { $this->error("邮件发送失败!"); } } else { $this->error('用户名和邮箱不匹配,请重新输入!'); } }
/** * 动态生成密码,供修改密码处使用 */ function randpw($len = 8, $format = 'ALL') { $is_abc = $is_numer = 0; $password = $tmp = ''; switch ($format) { case 'ALL': $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; case 'CHAR': $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break; case 'NUMBER': $chars = '0123456789'; break; default: $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; } mt_srand((double) microtime() * 1000000 * getmypid()); //组合字符串 while (strlen($password) < $len) { //随机字符或数字 $tmp = substr($chars, mt_rand() % strlen($chars), 1); //判断是否出现数字了 if ($is_numer != 1 && is_numeric($tmp) && $tmp > 0 || $format == 'CHAR') { $is_numer = 1; } //判断是否出现字符了 if ($is_abc != 1 && preg_match('/[a-zA-Z]/', $tmp) || $format == 'NUMBER') { $is_abc = 1; } //连接 $password .= $tmp; } //判断条件是否符合,或者重新生成 if ($is_numer != 1 || $is_abc != 1 || empty($password)) { $password = randpw($len, $format); } return $password; }