用Redis替代session改寫thinkPHP驗證碼類
阿新 • • 發佈:2019-01-03
最近有一個專案,因為後端用的是thinkPHP框架,前端用的VueJS框架,需要用到驗證碼,由於都是用的API,所以原有的tp框架驗證碼類採用的session儲存方式無法實現需求,需要進行改寫。記錄一下過程,並分享給大家以供參考。
驗證碼類中主要涉及到兩個方法,一個是生成方法entry,另一個就是驗證方法check。
1、定一個變數
protected $redis;
在__construct方法中加入redis的連線
$this->redis = new \Redis();
$this->redis->connect(C('REDIS_HOST'), C('REDIS_PORT' ));
$this->redis->auth(C('REDIS_AUTH')); //密碼驗證
2、將entry方法中的這行
session($key.$id, $secode);
改寫為redis儲存
$this->redis->setex($key . $code, $this->expire, json_encode($secode));
3、將check方法重寫
public function check($code, $id = '')
{
$a_code = $this->authcode(strtoupper($code ));
$key = $this->authcode($this->seKey) . $a_code;
// 驗證碼不能為空
$secode = $this->redis->get($key);
$secode = json_decode($secode, true);
if (empty($code) || empty($secode)) {
return false;
}
if ($a_code == $secode['verify_code' ]) {
$this->reset && $this->redis->delete($key);
return true;
}
return false;
}