PHP+Ajax實現驗證碼的即時驗證功能

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了PHP+Ajax實現驗證碼的即時驗證,感興趣的小夥伴們可以參考一下

PHP的影像處理功能強大,做一張驗證碼圖片也是非常簡單的,但是,在實現即時驗證時,確遇到了一個難題:
我用nat123對我的電腦上的網站進行連接埠映射,實現了在外網訪問,本來是採用cookie的方式用js對驗證碼進行驗證,但是經檢驗發現nat123雖然使我的網站可以通過一個自訂的網址進行訪問,但是產生驗證碼的php檔案在網路上的位置竟然和其它頁面不在一個域,經查詢得知,因為輸出圖片的緣故,被作為快取檔案映射在了某個檔案夾內,所以——其他頁面在我的網址下,產生驗證碼的頁面又在另一個網址裡,所以它們的cookie不能共用,不管怎麼設定path和domain都不管用,於是我只好採用session儲存驗證碼了,因為session存在於伺服器,也就是在我本地網址中都可以存取。
接下來是重頭戲,之前只是粗略瞭解過ajax,對於它的用途和特性還是知道的,擷取後台來的資料這個比較泛泛的概念具體的使用起來就不知道如何下手了。
首先,我分析了個例題的代碼,用途是擷取背景一個文字檔的內容:

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請求發向的頁面和XMLHttpRequest對象送迴響應的時候觸發的處理函數,而資料正是通過request.responseText擷取的。

--------------------------------------------------------------------------------

可是我要擷取的資料是後台php檔案產生的驗證碼,怎麼讓後台發送驗證碼?
無論GET還是POST方式都是把資料發送到後台,ajax從哪裡取回背景資料呢?
百思不得其解之下,我又查詢了另一本資料,找到一個樣本:
其中XMLHttpRequest對象送迴響應的處理語句是:

request.onreadystateschange=alertContent;function alertContent(){...  alert(request.responseText);...}

請求的檔案為check.php
其中有這麼幾句條件輸出:

if($info){  echo "你的使用者名稱可以使用";}else {  echo "該使用者名稱已被註冊";}

而運行執行個體中赫然在靜態頁面彈出訊息框,內容如check.php頁面的輸出!!!
也就是說ajax能請求到一個php頁面的輸出內容,於是,接下來簡單多了,因為圖片也是驗證碼頁面的輸出,所以不能直接ajax驗證碼頁面,不然就把圖片的資料也擷取了。
建立一個php頁面:

sission_start();$code="";if(!empty($_session['check']))$code=$_session['check'];echo $code;

再在前端用ajax向這個頁面GET一個請求,就能用request.responseText擷取驗證碼了。
然後把驗證過程封裝在一定條件觸發的函數裡,即可即時驗證。

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

相關推薦

PHP MYSQL簡易互動式網站開發詳解

PHP實現簡單ajax Loading載入功能的方法

php實現浮水印文字和縮圖的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.