/**
  *  找回密码页
  */
 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('用户名和邮箱不匹配,请重新输入!');
     }
 }
Exemplo n.º 2
0
/**
 * 动态生成密码,供修改密码处使用
 */
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;
}