天天看點

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

前言

最近分析ThinkPHP開源架構源碼,下面給大家帶來分享一段來着其内部的驗證碼生成與應用的解析,也算是一種自我總結吧。耐心閱讀博文您可以獲得如下【3本經驗書】以及一份【驗證碼Demo執行個體】:

1.為什麼需要驗證碼

2.驗證碼是如何生成的

3.在項目裡,驗證碼是如何工作的

Demo位址:https://pan.baidu.com/s/1o7H3xzG    密碼:gtbc

為什麼需要驗證碼

現在很多應用或者網址登入注冊時都加入了驗證碼這一環節的檢驗。如手機,圖檔,操作等驗證碼,如下圖:

圖檔驗證碼:

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

手機驗證碼:

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

操作驗證碼:

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

雖然它們的擷取方式各自不同但宗旨還是一樣,就是防止機器惡意注冊登入。

驗證碼是如何生成的

第一步:二話不說直接下載下傳DEMO運作

https://pan.baidu.com/s/1o7H3xzG    密碼:gtbc

第二步:

執行運作後生成驗證碼如下圖範例效果:

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

DEMO的通路URL位址以及驗證碼圖中都有了,點選驗證碼圖檔可以随意切換驗證碼

第三步:

第二步如果順利的話就可以看到上圖中的驗證碼了,那麼它是如何生成的呢?

關于生成的代碼這裡就不貼出來了,DEMO中本人已注釋明确。代碼已經過測試,邏輯方面已無問題如果執行報錯可能就是環境的問題。比如你的PHP沒開啟相關圖像操作的擴充。畢竟驗證碼是生成過程中調用的是PHP圖檔操作的擴充

在項目裡,驗證碼是如何工作的

如果第二步你順利通過了,那麼恭喜你說明你的環境也沒問題。接下來就給大家簡單的剖析驗證碼在項目中的應用過程

第一步:在驗證碼生成的時候,把生存出來的驗證碼進行加密,最後以加密密鑰與自定義id組合為SESSION鍵存入SESSION中。代碼見下圖(該段代碼出處是DEMO中的Verify.php檔案中的170行-177行)

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

第二步:第一步完成之後我們的頁面就展示出了一個驗證碼了。其實這個時候系統的session中已經儲存了驗證碼的加密Code。當使用者輸入驗證碼後并點選登入。驗證碼的明文就會傳到後端,後端接受到驗證碼并已相同的加密方式加密然後與SESSION中的驗證碼對比,如果正确則傳回true。代碼見下圖(該段代碼出處是DEMO中的Verify.php檔案中的77行-97行)

PHP驗證碼[,PHP檢驗碼][,PHP校驗碼][,PHP生成驗證碼][,PHP擷取驗證碼]前言為什麼需要驗證碼驗證碼是如何生成的在項目裡,驗證碼是如何工作的結束語

結束語

到這裡就大緻的勾勒了一下關于驗證碼的生成和使用方法了。本文闡述的内容比較簡單,Demo的例子可以直接快速應用在現實的項目中。如果想深入學習該類的設計思想就自行閱讀DEMO代碼,畢竟設計思想才是精髓所在。希望本文對同胞們有所幫助,謝謝大家~

轉載于:https://my.oschina.net/u/2484485/blog/843171