登录功能一般是指用户输入用户名、密码以及验证码后,后台检测用户身份并放行进入主界面。在本项目的登录功能中,有3个输入框,分别是用户名、密码、验证码,以及一个登录按钮。页面代码如下。
1 <p> 2 <p><p></p></p> 3 <p> 4 <ul> 5 <li><label>用户名:</label><input type="text" name="username" size="16"></li> 6 <li><label>密码:</label><input type="password" name= "password" size="16"></li> 7 <li><label>验证码:</label><input name="verifycode" size="4" maxlength="4" /><img src=" {:url('checkVerify')}" onclick="javascript:this.src='{:url('checkVerify')}? tm='+Math.random;" title="重设" id= "verifyImage"/></li> 8 <li><label></label><input type="submit" /></li> 9 </ul>10 </p>11 </p>
上述页面代码的效果如图25-3所示。
图25-3 登录界面
下面定义一个application/admin/validate/AdminValidate验证器类,用于管理员登录时的验证。其代码如下。
1 namespace app/admin/validate; 2 use think/Validate; 3 4 class AdminValidate extends Validate 5 { 6 protected $rule = [ 7 ['username', 'require', '用户名不能为空'], 8 ['password', 'require', '密码不能为空'], 9 ['verifycode', 'require', '验证码不能为空']10 ];11 12 }
上述验证器中,要求用户名、密码、验证码都不能为空。
执行登录函数为doLogin,实现代码如下。
1 public function doLogin{ 2 $username = Request::instance->param('username'); 3 $password = Request::instance->param('password'); 4 $verifycode = Request::instance->param('verifycode'); 5 6 // 验证规则验证 7 $result = $this->validate(compact('username', 'password', "verifycode"), 'Admin- Validate'); 8 if(true !== $result){ 9 $this->error($result);10 }11 12 // 检查验证码13 $verify = new Verify;14 if (!$verify->check($verifycode)) {15 $this->error('验证码错误');16 }17 18 // 检查用户名19 $hasUser = db('admin')->where('username', $username)->find;20 if(empty($hasUser)){21 $this->error('用户名或密码错误');22 }23 24 // 检查密码25 if(md5($password) != $hasUser['password']){26 $this->error('用户名或密码错误!');27 }28 Session::set('username',$username);29 $this->redirect('index/index');30 }
执行登录时,首先接收用户提交的3个参数,然后调用validate类先进行非空验证,接下来依次检测验证码、用户名、密码是否正确。其中,密码使用MD5算法加密。3个参数都输入正确后,使用Session类将用户名写入session中,作为登录状态判断依据,并跳转到主界面。