登錄功能一般是指用戶輸入用戶名、密碼以及驗證碼後,後台檢測用戶身份並放行進入主界面。在本項目的登錄功能中,有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中,作為登錄狀態判斷依據,並跳轉到主界面。