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生成随机密码的几种方法
Jan 17 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php给每个段落添加空格的方法
Mar 20 PHP
php生成短域名函数
Mar 23 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 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/12/06 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
JS面向对象编程详解
2016/03/06 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python实现的字典值比较功能示例
2018/01/08 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
基于Python实现粒子滤波效果
2020/12/01 Python
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
关于逃课的检讨书
2014/01/23 职场文书
滞留工资返还协议书
2014/10/19 职场文书
邀请函的格式
2015/01/30 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
学校德育工作总结2015
2015/05/11 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL