• 上篇文章写道了在easyswoole使用session进行登录的会话控制
  • 这里将对登录模块进行验证码的登录验证,验证码对于登录防护也是一种重要的手段

拓展包安装

composer require easyswoole/verifycode=3.x

验证码使用

  • 验证码一般都有点击刷新的功能,这里需要给生成验证码一个路由,用于随机生成,在Router.php文件中写入路由

$routeCollector->addRoute(‘POST’,’/verify’,‘Index/verify’);

  • 前端加载登录模板加载登录样式,进行请求验证码路由设置
<!DOCTYPE html>
<head><title>测试</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<form action="/submit" method="post">用户名:<input name="name" type="text">密码:<input name="password" type="password">验证码:<input type="text" name="verifycode"><img src="{{$img}}" style="cursor: pointer" id="img"><button type="submit">提交</button>
</form>
<script>$(function () {$('#img').click(function () {$.ajax({type:'post',url:'/verify',success:function (data) {if (data.code == 200){console.log(data.result)$("#img").attr('src',data.result)}}})})})
</script>
</body>
</html>
  • 控制器中进行验证码的生成,下为核心代码
$config = new Conf();
$code = new \EasySwoole\VerifyCode\VerifyCode($config);
$random = Random::character(4,'0123456789');
$img = $code->DrawCode($random)->getImageBase64();

  • 登录验证时同时对验证码也进行验证,验证码的验证可以使用session的方式保存进行验证,但是验证码是经常变动,会消耗服务器资源,这里就使用存cookie的方式来验证。主要思路生成两个cookie,一个cookie为加密后完整的,一个为未加密用于传到后台进行加密再与完整的cookie进行比对
   //cookie 生成private function setCookie($code){$salt = 'test';$time = time();$cookie1 = md5($code.$salt.$time);$cookie2 = $time;$this->response()->setCookie('cookie1',$cookie1,time()+7200);$this->response()->setCookie('cookie2',$cookie2,time()+7200);}
  • 控制器Index.php完整代码
<?phpnamespace App\HttpController;use App\Models\Test;
use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Session\Session;
use EasySwoole\Template\Render;
use EasySwoole\Utility\Random;
use EasySwoole\VerifyCode\Conf;class Index extends Controller
{public function onRequest(?string $action): ?bool{   $cookie = $this->request()->getCookieParams('easy_session');$session = Session::getInstance()->get($cookie);$action = $this->getActionName();if ($action =='login' || $action =='submit'||$action=='verify'){if ($session){$this->response()->redirect('/ts');}return true;}if (!$session){$this->response()->redirect('/login');return false;}return true;}public function index(){$test = Test::create()->where('test', 22)->all();$this->response()->write(Render::getInstance()->render('index', compact('test')));}public function hello(){$this->response()->write('hello world');return '/ts';}public function test(){$tt = $this->request()->getCookieParams('easy_session');$session = Session::getInstance()->get($tt);$this->writeJson('200',$session,'success');}//登录页面public function login(){$img = $this->getVcode();$this->response()->write(Render::getInstance()->render('login',compact('img')));}//验证码public function verify(){$img = $this->getVcode();$this->writeJson('200',$img,'success');}//post登录public function submit(){$name = 'admin';$password = 123456;$l_name = $this->request()->getRequestParam('name');$l_password = $this->request()->getRequestParam('password');$code = $this->request()->getRequestParam('verifycode');//验证码验证if ($l_name == $name && $l_password == $password&&$this->getCookie($code)===true){$sid = Session::getInstance()->sessionId();$this->response()->setCookie('easy_session',$sid,time()+7200);Session::getInstance()->set($sid,['name'=>$l_name,'password'=>$l_password,'cookie'=>$sid,'time'=>time()]);$this->response()->redirect('/tt');}else{$this->response()->redirect('/login');}}protected function actionNotFound(?string $action){$this->response()->withStatus(404);$file = EASYSWOOLE_ROOT . '/vendor/easyswoole/easyswoole/src/Resource/Http/404.html';if (!is_file($file)) {$file = EASYSWOOLE_ROOT . '/src/Resource/Http/404.html';}$this->response()->write(file_get_contents($file));}//验证码生成 和 cookie设置private function getVcode(){$config = new Conf();$code = new \EasySwoole\VerifyCode\VerifyCode($config);$random = Random::character(4,'0123456789');$img = $code->DrawCode($random)->getImageBase64();$this->setCookie($random);return $img;}//cookie 生成private function setCookie($code){$salt = 'test';$time = time();$cookie1 = md5($code.$salt.$time);$cookie2 = $time;$this->response()->setCookie('cookie1',$cookie1,time()+7200);$this->response()->setCookie('cookie2',$cookie2,time()+7200);}//cookie验证private function getCookie($code=null){if (!isset($code)){return false;}$salt = 'test';$cookie1 = $this->request()->getCookieParams('cookie1');$cookie2 = $this->request()->getCookieParams('cookie2');$cookie2 = md5($code.$salt.$cookie2);if ($cookie1 == $cookie2){return true;}else{return false;}}
}

easyswoole验证码的使用相关推荐

  1. 集成EasySwoole+LayuiAdmin PHP 框架

    最高效简单的PHP 框架 主要实现: 添加easyswole 必要的类库跟方法, 对接前端跟后端接口, 实现后台角色跟权限管理 运行环境(参照EasySwoole 文档) 保证 PHP 版本大于等于 ...

  2. Python:尝试对知乎网验证码进行处理

    许多流行的内容管理系统即使加了验证码模块,其众所周知的注册页面也经常会遭到网络 机器人的垃圾注册. 那么,这些网络机器人究,竟是怎么做的呢?既然我们已经,可以成功地识别出保存在电脑上 的验证码了,那么 ...

  3. Django 验证码4.4

    验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 验证码视 ...

  4. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...

    JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取) 发布时间:2018-05-18 16:41, 浏览次数:632 , 标签: JAVA HttpClien ...

  5. 微信小程序获取验证码倒计时

    实现效果图 使用方法: setInterval demo:(如果对 setInterval不了解的可以先百度下) xml 中写一个按钮: <view class="container& ...

  6. android 短信验证码的实现

    公司用的短信验证码是Mob.com 网址:http://www.mob.com 进入网站 注册登录之后 进入后在上面有应用是让选择android还是ios 之类的,点击下载SDK --选择免费短信验证 ...

  7. 为什么很多网站的验证码都设置得肉眼都很难识别?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 首先来谈谈验证码的机制,验证码作为一种人机识别手段,其终极目的,就是区分正常人和机器的操作.而对于没有验证码的场景,比如用户登陆,则机器可以同时.大 ...

  8. python 生成验证码

    import randomfrom PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = "abcdefgh ...

  9. ThInkPHP验证码不显示,解决方法汇总

    出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查: ① PHP是否已经安装GD库支持: ② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文 ...

  10. js 验证码 倒计时60秒

    <input type="button" id="btn" value="免费获取验证码" /> <script type ...

最新文章

  1. java person抽象类_java 抽象类
  2. Python练习题(day1)
  3. 我对CSDN前10名的研究
  4. videoview 播放视频
  5. 设计模式C++实现(4)——单例模式
  6. python画正方体_python绘制立方体的方法
  7. 【Gym - 101612C】【2017-2018NEERC】Consonant Fencity(状压枚举,预处理)
  8. 路由代码WebApi设置namespace路由参数
  9. Java问题定位之如何借助线程堆栈进行问题分析
  10. 一步一步写算法(之挑选最大的n个数)
  11. 调侃面向对象编程的23种设计模式
  12. ImportError: cannot import name main
  13. tensorflow2.0对应python版本_TensorFlow2.1.0最新版本安装详细教程
  14. python中capitalize()函数的用法
  15. 吴恩达深度学习——超参数调优
  16. 从0开始学习 GitHub 系列之「05.Git 进阶」
  17. 诺基亚Ovi商店开卖《水果忍者》
  18. sim868 c++二次开发基本完成
  19. Word 用宏命令实现锁定页眉页脚的两种方式
  20. 基于白鲸优化算法的函数寻优算法

热门文章

  1. MySQL详细学习教程(建议收藏)
  2. U盘无法格式化,变成8M,RAW格式,0字节的U盘修复教程
  3. p2p网络终结者最高权限使用教程
  4. 如何使textarea显示滚动条
  5. 卡巴斯基最新激活码、授权文件,可用卡巴斯基
  6. python编程与几何图形pdf_《程序员数学:使用 Python 进行 3D 图形,机器学习和仿真》PDF 免费下载...
  7. 中国营养与健康调查(CHNS)2018年最新数据
  8. python2.7使用教程_使用模块 - 廖雪峰 Python 2.7 中文教程
  9. oozie mysql5.6_oozie服务安装及使用
  10. html特殊乘转义字符,HTML特殊转义字符列表