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 ajax 静态分页过程形式
Sep 02 PHP
如何使用php实现评委评分器
Jul 31 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
关于php unset对json_encode的影响详解
Nov 14 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
php解决安全问题的方法实例
Sep 19 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
TP5框架安全机制实例分析
Apr 05 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 7.0主要新特性
2016/01/07 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
webpack3之loader全解析
2017/10/26 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
Python实现文件信息进行合并实例代码
2018/01/17 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
python3处理含有中文的url方法
2018/05/10 Python
对python Tkinter Text的用法详解
2018/10/11 Python
django页面跳转问题及注意事项
2019/07/18 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
机械工程系毕业生求职信
2013/09/27 职场文书
大专生的学习自我评价
2013/12/04 职场文书
英文请假条
2014/04/11 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
Python语言内置数据类型
2022/02/24 Python