shop34-17-登錄驗證碼
驗證碼的分析
登錄:防止暴力破解
論壇:防止灌水水
展示類:被抓取。
需要技術:
圖片處理技術。
會話session技術。
PHP圖片處理技術 – GD
具體操作步驟
開啟GD擴展
Apache restart
場景:
制作500×300的綠色圖片
創建畫布
畫布,一種資源型數據。可以操作的圖像資源。
創建新畫布(新建)
ImageCreate(寬,高),創建基於調色板的畫布。
imageCreateTrueColor(寬,高);創建真彩色的畫布。
基於圖片創建畫布(打開)
imageCreateFromJPEG(圖片地址);
imageCreateFromPNG(圖片地址);
imageCreateFromGIF(圖片地址);
操作畫布
分配顏色:如果需要在畫布上使用某個顏色,應該先將顏色分配到畫布上。
使用函數:
顏色標識 = imageColorAllocate(畫布,R,G,B);
顏色的表示方式:
RGB
填充畫布:將填充點,連續並且顏色相同的點進行填充(替換)
使用函數:
imageFill(畫布, 填充位置x, 填充位置Y,顏色標識)完成
位置采用坐標進行管理:
原點:0,0,畫布的左上角。
向右,x軸增加,向下Y軸增加。
右下角坐標:width-1,height-1
輸出畫布
將畫布中處理好的圖樣信息,輸出出來。
典型的:
1輸出到圖片文件。
2直接輸出。
使用函數:
imagePNG(畫布[, 文件地址]):
imageJPEG();
imageGIF();
如果沒有第二個參數,表示直接輸出。
如果直接輸出到瀏覽器,需要告知瀏覽器,響應數據的類型應該是PNG格式的圖片:
使用指令Content-type
tip:一個畫布可以輸出多次,輸出為各種格式!
銷毀畫布資源
imageDestroy();
項目中實現驗證碼
驗證碼工具類
Framework/tool/Captcha.class.php
自動加載:
生成驗證碼圖片:
Session開啟重復避免:
背景圖位置:
登錄表單時展示
在登錄表單頁面,通過IMG標簽,請求生成圖片的URL地址,展示圖片。
<img src=”URL” />
增加一個動作,用於完成生成后台登錄界面的驗證碼圖片:
Back/AdminController->captchaAction();
頁面的img標簽的src屬性,請求該動作:
Tip:如果圖片顯示失敗,如何調試?
應該直接請求生成圖片的地址,而不是在img標簽中查看。
我的程序,應該將captchaAction()也列為登入認證例外:
后台的平台控制器:
結果:
點擊更換:
通過點擊事件,對生產驗證碼圖片的地址重新請求,形成新的驗證碼,進行展示!
如果img標簽的src屬性被更改,則瀏覽器會對新的url進行請求,展示在img圖片區域內。
驗證管理員信息前驗證
在驗證管理員信息的合法性前,對驗證碼作出驗證:
Back/AdminController->checkAction();
增加驗證碼工具類Captcha的方法
checkCaptcha()
Back/AdminController->checkAction();
利用上面的方法完成驗證:
tip:圖片程序錯誤解析
step1: 請求生成圖片的URL
語法錯誤:
邏輯錯誤:
此時,如果出現語法錯誤,頁面會有相應的提示。
但是沒有語法錯誤,就如上面的結果,提示圖片內部錯誤無法顯示:
Step2:將header(‘Content-Type:image/jpeg’)注釋
解決即可!
圖片不能展示的原因:額外輸出
BOM:utf-8編碼文件的簽名,三個字節的隱藏字符。也是輸出的!
shop34-18-退出-登錄標志
退出
銷毀登錄標志,
Session中存儲的is_login
控制器-動作
修改top模板,請求到退出動作:
登錄標志
通常還具有存儲當前登錄用戶(管理員)信息的功能!
在 存儲登錄標志時,獲取當前管理員信息,存儲到session中:
Back/AdminController->checkAction();
需要back/AdminModel->check()方法,返回的為管理員信息(合法情況下):
在back/PlatformController->_checkLogin()中驗證管理員是否登錄時,使用admin下標:
退出時,銷毀的也是該標志:
Back/AdminController->logoutAction();
頁面上可以獲取管理員信息:
Back/top.html中,顯示:你好 管理員!