1)使用控制器来控制
views:
<tr> <td width="100"><?php echo $form->textField($model, \'captcha\', array(\'class\' => \'input_s\', \'style\' => \'width:80px\')); ?></td> <td width="110"><img id="captcha_img" src="<?php echo $this->createUrl(\'captcha/getPic\') . \'?\' . rand(0, 99); ?>" style="cursor: pointer" title="看不清楚,点击换一张验证码" alt="验证码" onclick="change_captcha();" /></td> <td><a href="javascript:void(0);" style=" font-family:\'宋体\'; font-size:12px; color:#0065A9" onclick="change_captcha();">换一张</a></td> </tr>
点击换一张的js:
function change_captcha(){
$(\'#captcha_img\').attr(\'src\', "<?php echo $this->createUrl(\'captcha/getPic\'); ?>?"+Math.floor(Math.random()*200+1));
$(\'#LoginForm_captcha\').val(\'\');
}
CaptchaController:
<?php
/**
* 验证码
*/
class CaptchaController extends CController {
public function actionGetPic(){
Yii::import("application.helpers.captcha.Captcha");
header("Content-type:image/png");
$captcha5 = new Captcha();
//@设置验证码宽度
$captcha5->setWidth(99);
//@设置验证码高度
$captcha5->setHeight(30);
//@设置字符个数
$captcha5->setTextNumber(4);
//@设置字符颜色
//$captcha5->setFontColor(\'#ff9900\');
//@设置字号大小
//$captcha5->setFontSize(25);
//@设置字体
//$captcha5->setFontFamily(\'t1.ttf\');
//@设置语言
//$captcha5->setTextLang(\'cn\');
//@设置背景颜色
//$captcha5->setBgColor(\'#000000\');
//@设置干扰点数量
$captcha5->setNoisePoint(100);
//@设置干扰线数量
//$captcha5->setNoiseLine(10);
//@设置是否扭曲
$captcha5->setDistortion(true);
//@设置是否显示边框
$captcha5->setShowBorder(false);
//输出验证码
$code = $captcha5->createImage();
Yii::app()->session[\'captchaCode\'] = array(
\'content\' => $code, //验证码的内容
\'time\' => time() //验证码的使用时间
);
exit;
}
}
//注意这里要引入包
将验证码作为一个登陆模型的属性:
<?php
class LoginForm extends CFormModel {
public $email;
public $password;
public $captcha;
public $rememberMe = false;
public $userInfo;
public function rules() {
return array(
array(\'email, password, captcha\', \'required\', \'message\' => \'{attribute}不能为空\'),
array(\'captcha\', \'checkCaptcha\'),
array(\'password\', \'authenticate\'),
);
}
public function checkCaptcha($attribute, $params) {
if (!$this->hasErrors()) {
$captcha = Yii::app()->session[\'captchaCode\'];
if (!isset($captcha[\'time\']) || $captcha[\'time\'] + 300 < time()) {
$this->addError(\'captcha\', \'验证码过期。\');
} else if (strtolower($captcha[\'content\']) != strtolower($this->captcha)) {
$this->addError(\'captcha\', \'验证码错误。\');
}
}
}
/**
* 登陆验证
* @param type $attribute
* @param type $params
*/
public function authenticate($attribute, $params) {
if (!$this->hasErrors()) {
$user = ComUser::model()->findByAttributes(array(\'email\' => $this->email));
if ($user && $user->password == $user->hashPassword($this->password, $user->salt)) {
if ($user->status == 1) {
$this->userInfo = $user;
unset(Yii::app()->session[\'captchaCode\']);
} else if ($user->status == 0) {
$this->addError(\'email\', \'用户暂未审核通过。\');
} else {
$this->addError(\'email\', \'用户已被禁用。\');
}
} else {
$this->addError(\'password\', \'账号或密码错误。\');
}
}
}
public function attributeLabels() {
return array(
\'email\' => \'用户名\',
\'password\' => \'密码\',
\'captcha\' => \'验证码\',
\'rememberMe\' => \'记住登陆\'
);
}
}
2).使用yii的验证码物件(参数可自己调试):
1.把public $captcha加入管理员Model的一个属性
验证rule时:
array(\'username, password, captcha\', \'required\', \'on\'=>\'login\'),
array(\'captcha\', \'captcha\', \'allowEmpty\'=>!extension_loaded(\'gd\'), \'on\'=>\'login\'),
然后控制器实例化时要使用场景。
2.视图页面:
<dt>验证码</dt>
<dd> <?php echo $form->textField($model,\'captcha\', array(\'class\'=>\'input-password verify-code\')); ?>
<?php $this->widget ( \'CCaptcha\', array (\'showRefreshButton\' => true, \'clickableImage\' => true, \'buttonType\' => \'link\', \'buttonLabel\' => \'换一张\', \'imageOptions\' => array (\'alt\' => \'点击换图\', \'align\'=>\'absmiddle\' ) ) );?>
<?php echo $form->error($model,\'captcha\'); ?> </dd>
3.在控制器Controller.php
public function actions ()
{
return array (\'captcha\' => array (\'class\' => \'CCaptchaAction\' , \'minLength\' => 1 , \'maxLength\' => 5 , \'backColor\' => 0xFFFFFF , \'width\' => 100 , \'height\' => 40 ) );
}