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 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 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 xml实例 留言本
2009/03/20 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP多维数组排序array详解
2017/11/21 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
python中list列表的高级函数
2016/05/17 Python
python实现二叉树的遍历
2017/12/11 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
行为习惯主题班会
2015/08/14 职场文书
Python使用DFA算法过滤内容敏感词
2022/04/22 Python