PHP实现登陆表单提交CSRF及验证码


Posted in PHP onJanuary 24, 2017

1、表单提交,并将其提交到本页

(1) form 属性method为post方法,修改路由,使其接收post、get的请求

Route::any('/admin/login','Admin\LoginController@login');

(2)LoginController.php

修改login方法,根据不同的请求返回不同的内容

如果请求方法为get ,返回登陆页面;如果请求为post,就行验证

use Illuminate\Support\Facades\Input;
public function login()
{
  if($input = Input::all()){
   dd($input);
  }else {
   return view('admin.login');
  }
}

刷新页面,如果返回如下

PHP实现登陆表单提交CSRF及验证码

这是laravel csrf保护,解决:

PHP实现登陆表单提交CSRF及验证码

正确显示:

PHP实现登陆表单提交CSRF及验证码

PHP实现登陆表单提交CSRF及验证码

2、确认验证码是否正确

(1)LoginController.php,修改login()方法

public function login()
{
  if($input = Input::all()){
   $code = new \Code();
   $_code = $code->get();
   if(strtoupper($input['code'])!=$_code){
   //strtoupper()函数将输入的字母转化为大写字母,否则小写也是属于不正确
   //back()函数返回上一请求页面,使用with将提示信息带回,信息存到session中
     return back()->with('msg','验证码错误');    
   }else{
    echo 'ok';
   }
  }else {
   return view('admin.login');
  }
}

(2)修改login.blade.php,获取session

将之前的用户名错误修改为:

@if(session('msg'))
<p style="color:red">{{session('msg')}}</p>
@endif

验证:

PHP实现登陆表单提交CSRF及验证码

问题总结:

1、如果有需要用到session传参的地方,路由必须写在中间件里面

比如在控制器使用back()函数的时候return back()->with('msg','验证码错误');,如果路由不是在中间件,没有session,即使你在入口session_start(),也没有用,又不好调试;还有就是不会产生csrf的_token

Route::group(['middleware' => ['web']], function () {
//路由要放中间件里面,否则会生成不了session
Route::any('/admin/login','Admin\LoginController@login');//这里需要接受post传参,所以必须用混合路由
Route::get('/admin/code','Admin\LoginController@code');
Route::get('/admin/getcode','Admin\LoginController@getcode'); 
});

2、引入第三方类的时候,如果此类文件有用到session,那么需要在入口文件session_start(),这是最简单的解决方式了,否则会报不认识$_SESSION

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
php 输出双引号&quot;与单引号'的方法
May 09 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
使用array_map简单搞定PHP删除文件、删除目录
Oct 29 PHP
PHP获取当前所在目录位置的方法
Nov 26 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
php处理json格式数据经典案例总结
May 19 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
php PDO异常处理详解
Nov 20 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 #PHP
php字符集转换
Jan 23 #PHP
Yii全局函数用法示例
Jan 22 #PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 #PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 #PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 #PHP
PHP三种方式实现链式操作详解
Jan 21 #PHP
You might like
显示程序执行时间php函数代码
2013/08/29 PHP
php获取域名的google收录示例
2014/03/24 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP 实现链式操作
2021/03/09 PHP
初学Javascript的一些总结
2008/11/03 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
python进阶教程之动态类型详解
2014/08/30 Python
Python Logging 日志记录入门学习
2018/06/02 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
Python常用编译器原理及特点解析
2020/03/23 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
日本语毕业生自荐信
2014/02/01 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
担保书范本
2015/01/20 职场文书
经营场所使用证明
2015/06/19 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书