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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP中Date获取时间不正确怎么办
Jun 05 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 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动态变静态原理
2006/11/25 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Python 绘制可视化折线图
2020/07/22 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
会计毕业生自荐信
2013/11/21 职场文书
实验室的标语
2014/06/20 职场文书
总经理岗位职责
2015/02/04 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
mysql事务隔离级别详情
2021/10/24 MySQL