Lavarel之圖片驗證碼 captcha

圖片驗證碼

簡介

圖片驗證碼在站點管理平臺許多場景中會使用,例如登錄、注冊等。使用php的composer工具可下載許多優秀的開源組件,例如gragwar/captcha。同時也可以自己編寫適合自己的圖片驗證碼類并融合到框架中作為工具類使用。

1. 使用gragwar/captcha庫

CAPTCHA 是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈)的縮寫,是一種區分用戶是計算機和人的公共全自動程序。這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。

1.1 下載組件

Gregwar/Captcha在Github地址為 https://github.com/Gregwar/Captcha

方式1 使用composer命令下載組件:

composer require gregwar/captcha

方式2 使用手工方式下載安裝組件:

composer.json文件中加入配置項

"require": {
  "gregwar/captcha": "1.*"
},

使用composer命令更新并下載

composer update

下載文件保存在 /vendor/gregwar/captcha 目錄下

1.2 使用組件

[案例] 在登錄控制器中創建圖片驗證碼以及獲取驗證碼操作

登錄路由 \app\Http\routes.php

//{rnd}作為隨機數,用于當點擊圖片時自動更換驗證碼。
Route::get('admin/captcha/{rnd}','Admin\LoginController@captcha');

Laravel5.2.9路由自動應用了web中間件,若添加web中間件則會造成模板中session無法獲取數據。

登錄控制器 \app\Http\Controllers\Admin\LoginController.php

//引入圖片驗證碼類
use Gregwar\Captcha\CaptchaBuilder;
//通過HTTP請求(Request $request)訪問或設置session實例
public function captcha(Request $request)
{
    // 實例化驗證碼類
    $captcha = new CaptchaBuilder;
    // 創建驗證碼
    $captcha->build($width=100, $height=40);
    // 獲取驗證碼
    $captcha= $captcha->getPhrase();
    // 將驗證碼保存在session中
    $request->session()->set('captcha',$captcha);
    // 頁面輸出驗證碼圖片
    header('Cache-Control:no-cache, must-revalidate');
    header('Content-Type: image/png');
    $captcha->output();
}

登錄視圖 \resources\views\admin\login.blade.php

<input type="text" class="code" name="vcode" id="vcode"/>
[圖片上傳失敗...(image-8510b9-1526307486684)]}})

注意:驗證碼圖片路徑需設置為/admin/captcha/0與路由保存一致,并添加默認隨機數供點擊更換時使用。

1.3 圖片驗證碼session的處理

由于在不同框架中會單獨提供session的處理,因此在圖片驗證碼類中并不建議將其存儲到session中。

在Laravel控制器中可通過HTTP請求Request $request對象的來設置和獲取session。在模板中可使用session()全局方法獲取session。

// 設置驗證碼保存至session
$request->session()->set('phrase',$phrase);

// 從session中獲取驗證碼
$request->session()->get('phrase');

1.4 圖片驗證碼點擊更換

考慮到不同瀏覽器對圖片地址處理不一樣,某些瀏覽器會對圖片地址解析,若圖片地址和原始請求一樣,則不發送新的請求。因此,需在點擊更換圖片驗證碼時,將圖片的src地址添加動態隨機數,以欺騙瀏覽器認為是不同請求。

[圖片上傳失敗...(image-64b1ea-1526307486685)]}})

 //點擊更換驗證碼
$('#captcha').on('click',function(){
    // 將圖片路徑以/分隔為數組
    var arr = $(this).attr('src').split('/');
    // 剔除數組中最后一項元素
    arr.pop();
    // 向數組末尾中添加隨機數
    arr.push(Math.random());
    // 用/連接數組元素為字符串后設置圖片路徑
    $(this).attr('src',arr.join('/'));
})

也可采用直接在元素中添加事件的方式,但并不推薦此做法雖然簡便一些。

[圖片上傳失敗...(image-49d9d7-1526307486686)]}})

1.5 驗證碼輸入控制

針對驗證碼輸入的單行文本域,首先需根據圖片驗證碼的個數限制其輸入長度,其次需對驗證碼的大小寫做約定。

<input type="text" class="code" name="vcode" id="vcode"/>
//驗證碼輸入個數限制并轉小寫
$('#vcode').on('keyup',function(){
    var val = $(this).val();
    if(val.length<6){
        $(this).val(val.toLowerCase());
    }else{
        $(this).val(val.substr(0,5));
    }
});

2. 使用手動添加組件生成驗證碼

待更新

小結

簡書的Markdown有個蛋疼的問題,在使用```輸出img標簽時,當src存在內容時,會自動解析為markdown的語法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容

  • Welcome 目前網絡上充斥著大量的陳舊信息,讓PHP新手誤入歧途,傳播著錯誤的實踐和糟糕的代碼,這必須得到糾正...
    layjoy閱讀 21,697評論 7 118
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,615評論 25 708
  • 該文是wecenter學習筆記的一部分 驗證碼管理 驗證需要考慮 驗證碼圖片的生成、存儲和訪問 驗證碼的有效期管理...
    imhaiyang閱讀 871評論 0 0
  • ——“朋友發的收藏圖,給你欣賞欣賞,欣賞完了,說說什么感覺? ” 奇葩A問 山水圖,百度一下,有山有水,懂了。 —...
    花心愛畫皮閱讀 419評論 0 0
  • 夠幸運的話,我們都會陸陸續續地結識到讓自己很喜愛的人,或多或少。我算是頻率很低的人,讓我喜歡又肯和我做朋友...
    銅銅閱讀 435評論 0 0