標籤:php html 驗證碼 auth code 思維導圖
大家都知道,驗證碼在網站註冊,登入以及很多的時候都是必備的功能。沒有了驗證碼,網站的安全性在很大程度上就受到了威脅。所以說,驗證碼是網站開發過程中不可或缺的一個功能,驗證碼的效果直接影響到網站的安全性。(這裡博主也順便吐槽一下,驗證碼這功能著實蛋疼,動不動就要輸個驗證碼,看著真心煩。前段時間12306還出了個動態驗證碼,尼瑪我想說全宿舍沒有人能輸入正確。只希望趕快出個替代性的功能,結束這個操蛋功能,我想沒幾個使用者喜歡整天對著驗證碼吧)。好了,廢話不說了。
先用思維導圖理清整體思路:
在auth.php中使用GD庫進行畫圖,布置驗證碼背景,將隨機產生的字串添加到背景中,同時將字串存到session中,保證在任何頁面中都可以摳出這驗證碼。在form.html中寫個簡單的登入表格,重點是有驗證碼環節,用<img>標籤載入auth.php中的驗證碼。然後將資料提交到submit.php頁面。在submit.php中,首先進行驗證碼驗證(這裡不討論username和password),看session中存的字串和form.html提交上來的驗證碼的字串是否相同,在這裡之前為了不區分大小寫,一律將字串轉為小寫。若字串相同,則進行頁面跳轉。若不同則返回登入頁面。
1.auth.php
<?phpheader("content-type:text/html;charset=utf-8");//開啟sessionsession_start();//準備畫布$im=imagecreatetruecolor(50,25);//準備塗料$black=imagecolorallocate($im,0,0,0);$gray=imagecolorallocate($im,200,200,200);//背景填充imagefill($im,0,0,$gray);//文字置中$x=(50-10*4)/2;$y=(25-5)/2+5;//準備文字$arr=array_merge(range(0,9),range('a','z'),range('A','Z'));shuffle($arr);$str=implode(array_slice($arr,0,4));//把$str放入session中,方便所有頁面中調用$_SESSION['vstr']=$str;$file="fonts/simsun.ttc";imagettftext($im,10,0,$x,$y,$black,$file,$str);//輸出到瀏覽器上或儲存起來header("content-type:image/png");imagepng($im);//關閉畫布imagedestory($im);?>
(1)header頭部前面不能夠有任何的輸出
(2)在使用session之前必須開啟session
2.form.html
<html> <head><meta charset="utf-8"><title>登入</title><style>table{border-collapse:collapse;}img{margin-top:5px;}</style> </head> <body><h2>使用者登入頁面</h2><hr><table width="500px" border="1px"><form action="submit.php" method="post"><tr><td>姓 名:</td><td><input type="text" name="username" id=""></td></tr><tr><td>密 碼:</td><td><input type="password" name="password" id=""></td></tr><tr><td>驗證碼:</td><td><input type="text" name="vcode"> <img src="auth.php"></td></tr><tr><td><input type="submit" value="提交"></td><td><input type="reset" value="重設"></td></tr></form></table> </body></html>(1)method的提交方式為post
(2)盡量保證文字框和驗證碼的協調
3.submit.php
<?phpheader("content-type:text/html;charset=utf-8");session_start();$code=strtolower($_POST['vcode']);$str=strtolower($_SESSION['vstr']);if($code==$str){//頁面跳轉echo "<script>location='http://www.baidu.com'</script>";}else{echo "<script>alert('驗證碼輸入錯誤');</script>";echo "<a href='form.html'>返回登入頁面</a>";}?>(1)使用strtolower()將字串全部轉為小寫,就免去了驗證碼區分大小寫麻煩過程。
(2)使用if語句進行判斷兩個字串相等是否為true。
(3)裡面加了一點js的東西,在<script>location=‘‘</script>的引號中添加需要跳轉的地址,就能直接跳轉。當然用header()也行,但是header()前面不能有輸出,局限性太大。最好還是用js。
PHP執行個體————實現驗證碼功能