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 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
基于PHP一些十分严重的缺陷详解
Jun 03 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
php微信高级接口群发 多客服
Jun 23 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
设定php简写功能的方法
Nov 28 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
3
2006/10/09 PHP
PHP4在Windows2000下的安装
2006/10/09 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
js中关于一个分号的崩溃示例
2013/11/11 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python中执行shell命令的几个方法小结
2014/09/18 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
金讯Java笔试题目
2013/06/18 面试题
什么是View State?
2013/01/27 面试题
上班睡觉检讨书
2014/01/09 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
学校春季防火方案
2014/06/08 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
北京导游词
2015/02/12 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js