一、验证码:
1.生成验证码:
//生成验证码: function getCode($num=4,$w=60,$h=31) { $code = ""; for ($i = 0; $i < $num; $i++) { $code .= rand(0, 9); } //4位验证码也可以用rand(1000,9999)直接生成 //将生成的验证码写入session,备验证页面使用 $_SESSION["helloweba_num"] = $code; //创建图片,定义颜色值 Header("Content-type: image/PNG"); $im = imagecreate($w, $h); $black = imagecolorallocate($im, 0, 0, 0); $gray = imagecolorallocate($im, 200, 200, 200); $bgcolor = imagecolorallocate($im, 255, 255, 255); imagefill($im, 0, 0, $gray); //画边框 imagerectangle($im, 0, 0, $w-1, $h-1, $black); //随机绘制两条虚线,起干扰作用 $style = array ( $black, $black, $black, $black, $black, $gray, $gray, $gray, $gray, $gray ); imagesetstyle($im, $style); $y1 = rand(0, $h); $y2 = rand(0, $h); $y3 = rand(0, $h); $y4 = rand(0, $h); imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED); imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED); //在画布上随机生成大量黑点,起干扰作用; for ($i = 0; $i < 80; $i++) { imagesetpixel($im, rand(0, $w), rand(0, $h), $black); } //将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成 $strx = rand(3, 8); for ($i = 0; $i < $num; $i++) { $strpos = rand(1, 6); imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black); $strx += rand(8, 12); } imagepng($im); imagedestroy($im); }
生成的验证码是0-9中的任意4位数字
2.获取验证码:
采取的方式是将验证码图片放入img标签中,同时使用ajax刷新验证码,代码:
<div class="space"> <span style="white-space:pre"> </span><div class="input-group"> <span class="input-group-addon"><span class="glyphicon glyphicon-edit"></span></span> <input style="width:150px;" id="code_num" name="code_num" class="form-control" placeholder="请输入验证码" required="required" autofocus> <img src="/website/getCode/"id="getcode_num" title="看不清,点击换一张"> </div> </div>
$("#getcode_num").click(function(){ <span style="white-space:pre"> </span>$(this).attr("src","<?php echo $base?>"+'/application/views/code_num.php?' + Math.random()); });
地址后面一定要带一个随机参数,防止浏览器缓存。如果不带的话,可能只能刷新一次就不能刷新了。
3.后台验证;
后台验证主要是之前将生成的验证码存放在session中,这一步只需要判定用户输入的跟session中的是否一样即可.
二、邮箱验证:
利用CodeIgniter中Email类我们可以轻松的实现SMTP发送邮件
function activate($username,$email){ $config=Array( 'crlf' => "\r\n", 'newline' => "\r\n", 'charset' => 'utf-8', 'protocol' => 'smtp', 'smtp_host'=> "smtp.qq.com", // SMTP Server. Example: mail.earthlink.net 'smtp_user'=> "您的邮箱地址", // SMTP Username 'smtp_pass'=> "密码", // SMTP Password 'smtp_port'=> "25", // SMTP Port,default 'mailtype'=> "HTML" ); $this->load->library('email',$config); $this->email->from('您的邮箱', '使用者名称');//用于在对方邮件中显示您的地址 $this->email->to($email); $this->email->subject('账户激活'); $content = "您已经成功注册本网站!点击链接完成账户激活:http://testwebsite.sinaapp.com/website/check_activate/".$username; $this->email->message($content); if($this->email->send()){ return true; } else{ return false; } }
我发送的内容是一个简单的文字加上超链接,该链接用来激活账户。