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 版本]
Mar 20 PHP
初识PHP
Sep 28 PHP
thinkphp常见路径用法分析
Dec 02 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
php pdo连接数据库操作示例
Nov 18 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php实现Session存储到Redis
2015/11/11 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
vue项目实战总结篇
2018/02/11 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python应用库大全总结
2018/05/30 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
优秀学生自我鉴定范例
2013/12/18 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
获奖感言怎么写
2015/07/31 职场文书
小学体育组工作总结
2015/08/13 职场文书
学校学期工作总结
2015/08/13 职场文书