PHP+Ajax實現(xiàn)驗證碼的實時驗證
PHP的圖像處理功能強大,做一張驗證碼圖片也是非常簡單的,但是,在實現(xiàn)實時驗證時,確遇到了一個難題:
我用nat123對我的電腦上的網(wǎng)站進行端口映射,實現(xiàn)了在外網(wǎng)訪問,本來是采用cookie的方式用js對驗證碼進行驗證,但是經(jīng)檢驗發(fā)現(xiàn)nat123雖然使我的網(wǎng)站可以通過一個自定義的網(wǎng)址進行訪問,但是產(chǎn)生驗證碼的php文件在網(wǎng)絡上的位置竟然和其它頁面不在一個域,經(jīng)查詢得知,因為輸出圖片的緣故,被作為緩存文件映射在了某個文件夾內,所以——其他頁面在我的網(wǎng)址下,產(chǎn)生驗證碼的頁面又在另一個網(wǎng)址里,所以它們的cookie不能共用,不管怎么設置path和domain都不管用,于是我只好采用session存儲驗證碼了,因為session存在于服務器,也就是在我本地網(wǎng)址中都可以存取。
接下來是重頭戲,之前只是粗略了解過ajax,對于它的用途和特性還是知道的,獲取后臺來的數(shù)據(jù)這個比較泛泛的概念具體的使用起來就不知道如何下手了。
首先,我分析了個例題的代碼,用途是獲取后臺的一個文本文件的內容:
function getHTTPObject(){
if(typedef XMLHttpRequest == "undefined")
XMLHttpRequest = function(){
try{ return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
catch(e){}
try{ return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
catch(e){}
try{ return new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){}
return false;
}
return new XMLHttpRequest();
}
function getNewContent(){
var request = getHTTPObject();
if(request){
request.open("GET","TEST.txt",true);
request.onreadystateschange = function(){
alert(request.responseText);
}
}else{
alert("no support XMLHttpRequest!");
}
}
其中的關鍵是:
request.open("GET","TEST.txt",true);
request.onreadystateschange =function(){
alert(request.responseText);
}
這三句指定了GET請求發(fā)向的頁面和XMLHttpRequest對象送回響應的時候觸發(fā)的處理函數(shù),而數(shù)據(jù)正是通過request.responseText獲取的。
--------------------------------------------------------------------------------
可是我要獲取的數(shù)據(jù)是后臺php文件產(chǎn)生的驗證碼,怎么讓后臺發(fā)送驗證碼?
無論GET還是POST方式都是把數(shù)據(jù)發(fā)送到后臺,ajax從哪里取回后臺的數(shù)據(jù)呢?
百思不得其解之下,我又查詢了另一本資料,找到一個示例:
其中XMLHttpRequest對象送回響應的處理語句是:
request.onreadystateschange=alertContent;
function alertContent(){
...
alert(request.responseText);
...
}
請求的文件為check.php
其中有這么幾句條件輸出:
if($info){
echo "你的用戶名可以使用";
}else {
echo "該用戶名已被注冊";
}
而運行實例效果圖中赫然在靜態(tài)頁面彈出消息框,內容如check.php頁面的輸出?。?!
也就是說ajax能請求到一個php頁面的輸出內容,于是,接下來簡單多了,因為圖片也是驗證碼頁面的輸出,所以不能直接ajax驗證碼頁面,不然就把圖片的數(shù)據(jù)也獲取了。
新建一個php頁面:
sission_start(); $code=""; if(!empty($_session['check']))$code=$_session['check']; echo $code;
再在前端用ajax向這個頁面GET一個請求,就能用request.responseText獲取驗證碼了。
然后把驗證過程封裝在一定條件觸發(fā)的函數(shù)里,即可實時驗證。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- PHP自定義函數(shù)判斷是否為Get、Post及Ajax提交的方法
- jquery ajax結合thinkphp的getjson實現(xiàn)跨域的方法
- 原生JS實現(xiàn)Ajax通過GET方式與PHP進行交互操作示例
- PHP+Ajax異步通訊實現(xiàn)用戶名郵箱驗證是否已注冊( 2種方法實現(xiàn))
- 基于PHP+Ajax實現(xiàn)表單驗證的詳解
- PHP+Ajax驗證碼驗證用戶登錄
- php+ajax注冊實時驗證功能
- PHP與Ajax相結合實現(xiàn)登錄驗證小Demo
- php傳值方式和ajax的驗證功能
- ajax+php實現(xiàn)無刷新驗證手機號的實例
- PHP+Ajax簡單get驗證操作示例
相關文章
使用php get_headers 判斷URL是否有效的解決辦法
本篇文章介紹了,使用php get_headers 判斷URL是否有效的解決辦法。需要的朋友參考下2013-04-04
PHP 實現(xiàn)字符串翻轉(包含中文漢字)的實現(xiàn)代碼
本篇文章主要介紹了PHP 實現(xiàn)字符串翻轉(包含中文漢字)的實現(xiàn)代碼,在PHP面試題中經(jīng)常遇到,有興趣的可以了解一下。2017-04-04
使用php方法curl抓取AJAX異步內容思路分析及代碼分享
怎樣抓取AJAX網(wǎng)站的內容?這是一個熱門的問題,也是一個棘手的問題。但實際上呢,抓取ajax異步內容的頁面和抓普通的頁面區(qū)別不大。ajax只不過是做了一次異步的http請求,只要使用firebug類似的工具,找到請求的后端服務url和傳值的參數(shù),然后對該url傳遞參數(shù)進行抓取即可2014-08-08
php獲取字符串前幾位的實例(substr返回字符串的子串用法)
下面小編就為大家?guī)硪黄猵hp獲取字符串前幾位的實例(substr返回字符串的子串用法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

