驗證碼分成三個部分,
A test.php 主頁面顯示驗證碼輸入 跟刷新按鈕
B image.php 產出亂數的圖片,並存入session
C check.php 驗證圖片跟輸入的值是否符合
需注意 在IE 下如點選驗證碼無刷新,
需要再按鈕跟圖片網址加上變數如 時間,
這樣每次刷新網址的參數會變,
避免IE如相同圖片會有暫存無刷新。
1. test.php 主頁面顯示驗證碼輸入 跟刷新按鈕
2.image.php 產出亂數的圖片,並存入session
ob_start(); session_start(); header('content-Type:image/gif'); echo mt_srand(time()); $randval = mt_rand(); $seccode = substr($randval,-4); $length = strlen($seccode); $_SESSION['seccode'] = $seccode; //用SESSION保存驗證碼 $img=imagecreate(80,30); $black = ImageColorAllocate($img, 0,0,0); $white = ImageColorAllocate($img, 255,255,255); $gray = ImageColorAllocate($img, 200,200,200); imagefill($img,0,0,$gray); for($i=0;$i<200;$i++) //加入干擾象素 { $randcolor = ImageColorallocate($img,rand(10,250),rand(10,250),rand(10,250)); imagesetpixel($img,rand()%90,rand()%30,$randcolor); } for ($i = 0; $i < $length; $i++) { $color = imagecolorallocate($img,abs(mt_rand()%256),abs(mt_rand()%256),abs(mt_rand()%256)); imagechar($img,20,abs(mt_rand()%4)+$i*15,abs(mt_rand()%5),$seccode[$i],$color); } imagegif($img); imageDestroy($img); ob_end_flush();3.check.php 驗證圖片跟輸入的值是否符合
session_start(); if($_POST['imgCode']==$_SESSION['seccode']) echo '驗證成功'; else echo '驗證失敗';
沒有留言:
張貼留言