Ⅰ php+AJAX session 驗證碼跟生成的不一致!
因為你做了一個非同步的操作。
1.驗證碼載入--顯示圖片--存入SESSION
2.頁面載入--讀取SESSION
這2步不是順序進行的,所以你只能通過刷新取到上次的SESSION。
你可以參考http://gqy2468.javaeye.com/blog/690941這里的寫法。
Ⅱ 如何用PHP生成驗證碼
PHP生成驗證碼的原理:使用PHP的GD庫,生成一張帶驗證碼的圖片,並將驗證碼保存在Session中。PHP生成驗證碼的大致流程有:
1、產生一張png的圖片;
2、為圖片設置背景色;
3、設置字體顏色和樣式;
4、產生4位數的隨機的驗證碼;
5、把產生的每個字元調整旋轉角度和位置畫到png圖片上;
6、加入噪點和干擾線防止注冊機器分析原圖片來惡意破解驗證碼;
7、輸出圖片;
8、釋放圖片所佔內存。
session_start();
getCode(4,60,20);
functiongetCode($num,$w,$h){
$code="";
for($i=0;$i<$num;$i++){
$code.=rand(0,9);
}
//4位驗證碼也可以用rand(1000,9999)直接生成
//將生成的驗證碼寫入session,備驗證時用
$_SESSION["helloweba_num"]=$code;
//創建圖片,定義顏色值
header("Content-type:image/PNG");
$im=imagecreate($w,$h);
$black=imagecolorallocate($im,0,0,0);
$gray=imagecolorallocate($im,200,200,200);
$bgcolor=imagecolorallocate($im,255,255,255);
//填充背景
imagefill($im,0,0,$gray);
//畫邊框
imagerectangle($im,0,0,$w-1,$h-1,$black);
//隨機繪制兩條虛線,起干擾作用
$style=array($black,$black,$black,$black,$black,
$gray,$gray,$gray,$gray,$gray
);
imagesetstyle($im,$style);
$y1=rand(0,$h);
$y2=rand(0,$h);
$y3=rand(0,$h);
$y4=rand(0,$h);
imageline($im,0,$y1,$w,$y3,IMG_COLOR_STYLED);
imageline($im,0,$y2,$w,$y4,IMG_COLOR_STYLED);
//在畫布上隨機生成大量黑點,起干擾作用;
for($i=0;$i<80;$i++){
imagesetpixel($im,rand(0,$w),rand(0,$h),$black);
}
//將數字隨機顯示在畫布上,字元的水平間距和位置都按一定波動范圍隨機生成
$strx=rand(3,8);
for($i=0;$i<$num;$i++){
$strpos=rand(1,6);
imagestring($im,5,$strx,$strpos,substr($code,$i,1),$black);
$strx+=rand(8,12);
}
imagepng($im);//輸出圖片
imagedestroy($im);//釋放圖片所佔內存
}
Ⅲ phpcmsPHPCMS v9 自定義表單添加驗證碼驗證
要在PHPCMS v9系統中自定義表單添加驗證碼驗證,首先需要在頭部代碼中加入以下代碼:
pc_base::load_sys_class('form', '', 0);
這行代碼的作用是載入系統中的表單類庫。接下來,需要在表單生成代碼中加入驗證碼的相關代碼。具體實現步驟如下:
1. 在需要添加驗證碼的表單頁面中引入驗證碼生成類庫:
pc_base::load_sys_class('verify', '', 0);
2. 在表單生成代碼中,添加生成驗證碼圖片的代碼:
$verify = new Verify();
$verify->entry();
3. 在表單提交處理代碼中,增加驗證用戶輸入的驗證碼是否正確:
if(!preg_match('/^\d{4}$/', $_POST['verifycode'])){
showmsg('驗證碼錯誤!', '', -1);
}
4. 確保在表單中添加驗證碼輸入框和圖片顯示:
<img src="getCheckCodeUrl(); ?>" alt="驗證碼">
通過以上步驟,你就可以在PHPCMS v9的自定義表單中成功添加驗證碼驗證功能,從而提高表單的安全性。