使用php實現(xiàn)網(wǎng)站驗證碼功能【推薦】
驗證碼是網(wǎng)站常用的一項安全措施,也是新人站長較難掌握的一項技能,這里我向大家介紹一簡單有效的驗證碼實現(xiàn)方法。
開始之前
在正式開始之前我們需要打開php的gd2圖形庫支持(在php.ini,中搜索“php_gd2.dll”,找到“;extension=php_gd2.dll”并去掉句首的分號) 。
可以參考:如何打開php的gd2庫
核心:img.php
這個頁面生成一張驗證碼并將正確數(shù)值寫入 Session
隨機一個4位驗證碼
$check=rand(1000,9999);
將生成的驗證碼寫入session
Session_start(); $_SESSION["check"] = $check;
創(chuàng)建一張圖片
$im = imagecreate(80,30);
由于這種圖片的背景默認(rèn)是黑色的所以我們要用白色填充。
imagefill($im,0,0,ImageColorAllocate($im, 255,255,255));
使用imageline隨機繪制兩條實線
$y1=rand(0,30); $y2=rand(0,30); $y3=rand(0,30); $y4=rand(0,30); imageline($im,0,$y1,70, $y3,000); imageline($im,0,$y2,70, $y4,000);
在隨機位置繪制文字
$strx=rand(3,15); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10));
輸出圖像
Header("Content-type: image/PNG"); ImagePNG($img);
結(jié)束,下面是完整代碼
<?php $check=rand(1000,9999); Session_start(); $_SESSION["check"] = $check; $img = imagecreate(80,30); imagefill($img,0,0,ImageColorAllocate($img,255,255,255)); $y1=rand(0,30); $y2=rand(0,30); $y3=rand(0,30); $y4=rand(0,30); imageline($img,0,$y1,70, $y3,ImageColorAllocate($img,55,255,25)); imageline($img,0,$y2,70, $y4,ImageColorAllocate($img,55,55,255)); $strx=rand(3,15); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); $strx+=rand(15,20); $stry=rand(2,15); imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10)); Header("Content-type: image/PNG"); ImagePNG($img);
用戶界面:index.php
想必大家都知道怎么做,我就直接給出代碼了
<!DOCTYPE html> <html> <body> <form action="action.php" method="post"> <input type="text" name="cikle" placeholder="驗證碼"> <br> <img id="cikle" style="-webkit-user-select: none" src="img.php"><input type="submit" value="Submit"> </form> </body> </html>
以上的代碼將用戶輸入的數(shù)值傳遞到“action.php”中
檢查:action.php
這一步要將用戶輸入數(shù)值與session中的數(shù)值進行比對
相等,輸出“正確”
不相等,輸出“不正確”
<?php Session_start(); if ($_SERVER["REQUEST_METHOD"] == "POST") { if($_SESSION["check"]!=intval($_POST["cikle"])){ echo "不正確"; }else{ echo "正確"; } }
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
php使用pdo連接報錯Connection failed SQLSTATE的解決方法
這篇文章主要介紹了php使用pdo連接報錯Connection failed SQLSTATE的解決方法,涉及針對配置文件的修改,具有一定的參考借鑒價值,需要的朋友可以參考下2014-12-12PHP開發(fā)不能違背的安全規(guī)則 過濾用戶輸入
作為PHP程序員,特別是新手,對于互聯(lián)網(wǎng)的險惡總是知道的太少,對于外部的入侵有很多時候是素手無策的,他們根本不知道黑客是如何入侵的、提交入侵、上傳漏洞、sql 注入、跨腳本攻擊等等。2011-05-05淺析PHP substr,mb_substr以及mb_strcut的區(qū)別和用法
本篇文章是對PHP中的substr,mb_substr以及mb_strcut區(qū)別和用法進行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP結(jié)合Ffmpeg快速搭建流媒體服務(wù)的實踐記錄
這篇文章主要給大家介紹了關(guān)于使用PHP結(jié)合Ffmpeg快速搭建流媒體服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10PHP面向?qū)ο蟪绦蛟O(shè)計之類與反射API詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計之類與反射API,結(jié)合實例形式較為詳細(xì)的分析了類的驗證、檢查、傳參及反射API等概念與操作技巧,需要的朋友可以參考下2016-12-12