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 相关文章推荐
Gregarius中文日期格式问题解决办法
Apr 22 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
php实现头像上传预览功能
Apr 27 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
tp5.1 框架路由操作-URL生成实例分析
May 26 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 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(1) php开发环境配置
2010/02/15 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
js常见表单应用技巧
2008/01/09 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Django Celery异步任务队列的实现
2019/07/24 Python
python getopt模块使用实例解析
2019/12/18 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
员工薪酬福利制度
2014/01/17 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
工作失误检讨书范文
2015/01/26 职场文书
辞职信怎么写?
2019/05/21 职场文书