-
動態(tài)校驗(yàn)查看全部
-
session查看全部
-
驗(yàn)證碼介紹查看全部
-
<form method="post" action="./form.php"> <p> 驗(yàn)證碼圖片: <!-- 這里在 src 中添加一個隨機(jī)數(shù),是為了在使用 "換一個" 功能時,瀏覽器會以為 src 與之前的有所不同 而重新從服務(wù)器下載圖片,否則瀏覽器會直接調(diào)用緩存中的 圖片 或者甚至 不做任何動作 --> <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand();?>" width:100px; height:30px/> <a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">換一個</a> </p> <p>請輸入圖片中的內(nèi)容:<input type="text" name="authcode" value="" /></p> <p><input type="submit" value="提交" ></p> </form>查看全部
-
<?php session_start(); $image = imagecreatetruecolor( 100,30 ); $bgcolor = imagecolorallocate($image,255,255,255); imagefill($image,0,0,$bgcolor); for($i=0;$i<200;$i++){ $pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200)); imagesetpixel($image,rand(1,99),rand(1,99),$pointcolor); } for($i=0;$i<3;$i++){ $linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220)); } $captch_code = ''; for($i=0;$i<4;$i++){ $fontsize = 6; $fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120)); $data = 'abcdefghijkmnpqrstuvwxy3456789'; $fontcontent = substr($data,rand(0,strlen($data)-1),1); $captch_code.=$fontcontent; $x = ($i*100/4) + rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } header('content-type:image/png'); imagepng($image); $_SESSION['authcode'] = $captch_code; ?>查看全部
-
<?php header('content-type:text/html;charset=utf-8'); if(isset($_REQUEST['authcode'])){ session_start(); if(strtolower($_REQUEST['authcode']) == $_SESSION['authcode']){ echo '<font color="#0000cc">輸入正確</font>'; }else{ echo '<font color="#0000cc">輸入錯誤</font>'; } exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>驗(yàn)證碼確認(rèn)</title> </head> <body> <form method="post" action="./form.php"> <p>驗(yàn)證碼圖片:<img border = "1" src="./captcha.php?r=<?php echo rand();?>"width:100px,height:100px" /></p> <p>請輸入驗(yàn)證碼內(nèi)容:<input type="text" name="authcode" value="" /></p> <p> <input type="submit" value="提交" /></p> </form> </body> </html>查看全部
-
這里打一個卡,利用memcache來存儲session信息以達(dá)到在多服務(wù)器情況下幾種管理session信息。查看全部
-
// 數(shù)字+字母驗(yàn)證碼 for ($i=0; $i < 4; $i++) { $fontsize = 6; // 0-120 為深色區(qū),能更好的在淺色背景中識別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); // 制作字典 并去除容易混淆的字符(l 與 1, z 與 2,等等) $data = 'abcdefghijkmnqprstuvwxy3456789'; // 通過截取字符串內(nèi)容方法,獲得隨機(jī)字符 $fontcontent = substr($data, rand(0,strlen($data)),1); // 生成的驗(yàn)證內(nèi)容不重疊 $x = ($i*100/4) + rand(5,10); // 生成的驗(yàn)證內(nèi)容不齊平 $y = rand(5,10); // 用 $fontcolor 顏色將字符串 $fontcontent 畫到 $image 所代表的圖像的 $x,$y 坐標(biāo)處 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); }查看全部
-
干擾信息一定控制好顏色,避免“喧賓奪主”背景色最淺,字體顏色最深,其次是像素點(diǎn),再次是干擾線 for ($i=0; $i < 3; $i++) { // 顏色設(shè)置為 80-220 ,是為了使 線 與 點(diǎn) 與 驗(yàn)證碼 更好的區(qū)分 $linecolor = imagecolorallocate($image, rand(80,220), rand(80,220), rand(80,220)); // imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ) // imageline() 用 color 顏色在圖像 image 中從坐標(biāo) x1,y1 到 x2,y2 畫一條線段。 imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $linecolor) } PS: 干擾元素一定要控制好顏色,使之不影響用戶識別驗(yàn)證碼查看全部
-
總結(jié)語法: 1、imagestring(圖像畫布 ,大小,x軸坐標(biāo),y軸坐標(biāo),內(nèi)容,顏色):水平地畫出一行字符串 2、imagecolorallocate(圖像畫布,顏色1,顏色2,顏色3):為一幅圖像分配顏色 3、imageline(圖像畫布,x1,y1,x2,y2,顏色):為一幅圖像添加一條線段 4、imagesetpixel(圖像畫布,x,y,顏色):畫出單一像素查看全部
-
<?php /*php之驗(yàn)證制作*/ //1、創(chuàng)建一個真空彩色圖像 $image=imagecreatetruecolor(100,30); //2、為圖像分配顏色 $bgcolor=imagecolorallocate($image,255,255,255); //3、填充圖像 imagefill($image,0,0,$bgcolor); //4、在圖像中添加隨機(jī)數(shù)字 $code=''; $content=''; for($i=0;$i<4;$i++){ $fontsize=20; $code=rand(0,9); $fontcolor=imagecolorallocate($image,0,0,0); $x=$i*(100/4)+rand(5,10); $y=rand(5,15); $content.=$code; imagestring($image,$fontsize,$x,$y,$code,$fontcolor); } //增加干擾元素 for($i=0;$i<400;$i++){ $pointcolor=imagecolorallocate($image,rand(0,200),rand(0,200),rand(0,200)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor); } session_start(); $_SESSION["content"]=$content; header('content-type:image/png'); imagepng($image); imagedestroy($image);查看全部
-
技術(shù)點(diǎn)、難點(diǎn)分析: 技術(shù)點(diǎn): 1)底圖的實(shí)現(xiàn),并且添加干擾元素:依賴PHP圖片處理庫GD,詳細(xì)查看:http://php.net/gd 2)生成驗(yàn)證內(nèi)容:簡單的隨機(jī)數(shù)生成,使用PHP函數(shù)mt_rand();隨機(jī)數(shù)字+字幕生成,需要ASCⅡ碼理論基礎(chǔ); 隨機(jī)中文內(nèi)容生成,需要UTF-8編碼理論基礎(chǔ) 3)驗(yàn)證內(nèi)容保存在服務(wù)端:需要PHP操作SESSION基礎(chǔ) 4)驗(yàn)證內(nèi)容的校驗(yàn):需要前端Ajax基礎(chǔ)查看全部
-
1、驗(yàn)證碼流程 服務(wù)器設(shè)置驗(yàn)證碼->判斷是否輸入正確:①、如果不正確,是Robot校驗(yàn)。②、如果正確,是person校驗(yàn) 2、為什么要屏蔽機(jī)器請求? 一般服務(wù)端業(yè)務(wù),寫請求產(chǎn)生的消耗要遠(yuǎn)遠(yuǎn)大于讀請求。 3、驗(yàn)證碼應(yīng)用哪些場景? A、登錄、注冊確定提交前,Person/Robot校驗(yàn) B、發(fā)布回復(fù)信息前,Person/robot校驗(yàn) C、疑似Robot請求時,Person/robot校驗(yàn)查看全部
-
課程代碼 https://gitee.com/xxg3053/captcha查看全部
-
驗(yàn)證碼所需技術(shù)查看全部
舉報
0/150
提交
取消