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开发大型项目的一点经验
Oct 09 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
解析PHP的session过期设置
Jun 29 PHP
php中session退出登陆问题
Feb 27 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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校验ISBN码的函数代码
2011/01/17 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
Python方法的延迟加载的示例代码
2017/12/18 Python
对python中的argv和argc使用详解
2018/12/15 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
医疗纠纷协议书
2014/04/16 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL