图片验证码优化

feat/task1-c-wallet
Devil 2021-04-15 10:29:07 +08:00
parent ddacccd634
commit a5c41c71af
6 changed files with 69 additions and 14 deletions

View File

@ -94,7 +94,7 @@ function GetUrlHost($url)
} }
// 判断是否是双后缀 // 判断是否是双后缀
$preg = '/[\w].+\.(com|net|org|gov|ac|bj|sh|tj|cq|he|sn|sx|nm|ln|jl|hl|js|zj|ah|fj|jx|sd|ha|hb|hn|gd|gx|hi|sc|gz|yn|gs|qh|nx|xj|tw|hk|mo|xz|edu|ge|dev)\.cn$/'; $preg = '/[\w].+\.(com|net|org|gov|ac|bj|sh|tj|cq|he|sn|sx|nm|ln|jl|hl|js|zj|ah|fj|jx|sd|ha|hb|hn|gd|gx|hi|sc|gz|yn|gs|qh|nx|xj|tw|hk|mo|xz|edu|ge|dev|co)\.(cn|nz)$/';
if(($n > 2) && preg_match($preg, $host)) if(($n > 2) && preg_match($preg, $host))
{ {
// 双后缀取后3位 // 双后缀取后3位

View File

@ -12,6 +12,7 @@ namespace app\service;
use think\Db; use think\Db;
use think\facade\Hook; use think\facade\Hook;
use app\service\UserService;
/** /**
* 资源服务层 * 资源服务层
@ -672,5 +673,28 @@ class ResourcesService
'application/x-zip-compressed', 'application/x-zip-compressed',
]; ];
} }
/**
* 获取用户唯一id
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-04-15
* @desc 未登录取[uuid]前端传过来的uuid、已登录取[用户id]、都没有则返回空字符串
*/
public static function UserUniqueId()
{
// 取参数uuid、默认空
$uid = input('uuid', '');
// 用户信息
$user = UserService::LoginUserInfo();
if(!empty($user) && !empty($user['id']))
{
$uid = $user['id'];
}
return empty($uid) ? '' : md5($uid);
}
} }
?> ?>

View File

@ -19,7 +19,7 @@ return [
// 应用地址 // 应用地址
'app_host' => '', 'app_host' => '',
// 应用调试模式 // 应用调试模式
'app_debug' => false, 'app_debug' => true,
// 应用Trace // 应用Trace
'app_trace' => false, 'app_trace' => false,
// 是否支持多模块 // 是否支持多模块

View File

@ -10,6 +10,8 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace base; namespace base;
use app\service\ResourcesService;
/** /**
* 验证码驱动 * 验证码驱动
* @author Devil * @author Devil
@ -30,6 +32,7 @@ class Verify
private $use_text_color_back; private $use_text_color_back;
private $key_verify; private $key_verify;
private $expire_time; private $expire_time;
private $user_uid;
/** /**
* [__construct 构造方法] * [__construct 构造方法]
@ -62,6 +65,9 @@ class Verify
$this->use_text_color_back = isset($param['use_text_color_back']) ? $param['use_text_color_back'] : in_array('textcolor', $rules); $this->use_text_color_back = isset($param['use_text_color_back']) ? $param['use_text_color_back'] : in_array('textcolor', $rules);
$this->key_verify = isset($param['key_prefix']) ? trim($param['key_prefix']).'_verify_code' : '_verify_code'; $this->key_verify = isset($param['key_prefix']) ? trim($param['key_prefix']).'_verify_code' : '_verify_code';
$this->expire_time = isset($param['expire_time']) ? intval($param['expire_time']) : 30; $this->expire_time = isset($param['expire_time']) ? intval($param['expire_time']) : 30;
// 用户唯一uid
$this->user_uid = ResourcesService::UserUniqueId();
} }
/** /**
@ -146,9 +152,16 @@ class Verify
*/ */
public function CheckExpire() public function CheckExpire()
{ {
if(isset($_SESSION[$this->key_verify])) // 空uid则存储session
if(empty($this->user_uid))
{
$data = session($this->key_verify);
} else {
$data = cache($this->key_verify.$this->user_uid);
}
if(!empty($data) && isset($data['time']))
{ {
$data = $_SESSION[$this->key_verify];
return (time() <= $data['time']+$this->expire_time); return (time() <= $data['time']+$this->expire_time);
} }
return false; return false;
@ -165,13 +178,20 @@ class Verify
*/ */
public function CheckCorrect($verify = '') public function CheckCorrect($verify = '')
{ {
if(isset($_SESSION[$this->key_verify]['verify'])) // 空uid则存储session
if(empty($this->user_uid))
{
$data = session($this->key_verify);
} else {
$data = cache($this->key_verify.$this->user_uid);
}
if(!empty($data) && isset($data['verify']))
{ {
if(empty($verify) && isset($_POST['verify'])) if(empty($verify) && isset($_POST['verify']))
{ {
$verify = trim($_POST['verify']); $verify = trim($_POST['verify']);
} }
return ($_SESSION[$this->key_verify]['verify'] == strtolower($verify)); return ($data['verify'] == strtolower($verify));
} }
return false; return false;
} }
@ -186,9 +206,12 @@ class Verify
*/ */
public function Remove() public function Remove()
{ {
if(isset($_SESSION[$this->key_verify])) // 空uid则处理session
if(empty($this->user_uid))
{ {
unset($_SESSION[$this->key_verify]); session($this->key_verify, null);
} else {
cache($this->key_verify.$this->user_uid, null);
} }
} }
@ -201,10 +224,18 @@ class Verify
*/ */
private function KindofSession() private function KindofSession()
{ {
$_SESSION[$this->key_verify] = array( $data = [
'verify' => $this->rand_string, 'verify' => $this->rand_string,
'time' => time(), 'time' => time(),
); ];
// 空uid则存储session
if(empty($this->user_uid))
{
session($this->key_verify, $data);
} else {
cache($this->key_verify.$this->user_uid, $data, $this->expire_time);
}
} }
/** /**

View File

@ -4,7 +4,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title> <title></title>
<script type="text/javascript" src="../internal.js"></script> <script type="text/javascript" src="../internal.js"></script>
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak={{common_baidu_map_ak}}"></script> <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=XSdiGjfg3wOHiKjpYEMG6CYA"></script>
<style type="text/css"> <style type="text/css">
.content{width:530px; height: 350px;margin: 10px auto;} .content{width:530px; height: 350px;margin: 10px auto;}
.content table{width: 100%} .content table{width: 100%}

View File

@ -14,7 +14,7 @@
overflow: hidden; overflow: hidden;
} }
</style> </style>
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak={{common_baidu_map_ak}}"></script> <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=XSdiGjfg3wOHiKjpYEMG6CYA"></script>
</head> </head>
<body onload="initMap();"> <body onload="initMap();">