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 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
swfupload 多文件上传实现代码
Aug 27 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 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 广告调用类代码(支持Flash调用)
2011/08/11 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python ChainMap的使用和说明详解
2019/06/11 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python实现扫码工具的示例代码
2020/10/09 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
百度吧主申请感言
2014/01/12 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
三方股份合作协议书
2014/10/13 职场文书
防汛工作情况汇报
2014/10/28 职场文书
厉行节约工作总结
2015/08/12 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL