昨天博主接到一个委托的需求,大数据同事想要在请求日志抓取数据,希望在我的每个页面进行cookie的种植,方便他们进行定位分析,我思考了一下,简单呀,首先考虑的是通过中间件进行cookie种植,但是随后发现在现在的项目结构里贸然增加一个单纯的非通用性的中间件,会导致项目的耦合增加于是乎,开始研究项目路由,好在,我的项目里面,所有路由都指向了同一个控制器(框架结构里面还有其他项目),于是乎,开动。
首先,增加了一个cookie种植的私有方法,放到控制器的构造函数里面,这样就可以实现cookie种植啦,cookie操作直接使用了框架自带的cookie啦,在app.php里面:
中文官方文档里面cookie有两种用法,第一种就是实例化一个response类 ,然后用withCookie()方法去种植:
return response($content) ->header('Content-Type', $type) ->cookie('name', 'value', $minutes);
 
或者
$response = new Response();
$cookie = cookie('name,'value',10);//保存10分钟
return $response->withCookie($cookie);
 
但是经过百度之后发现了一个更更加灵活的使用方式:
Cookie::queue('name','value',10);
这种方式更加适用于控制器哦
但是这个里这么了博主好几个小时,网上其他大咖分享的知识,都是在控制器使用之后完美种植,奈何我无论如何都不能实现(response可以实现),郁闷,沉浸下来思考了一下,应该是我们项目和标准框架那里有差异,于是各种搜索,琢磨开始了,最后发现了一个可疑的类:AddQueuedCookiesToResponse,从字面可以看出它的功能,添加队列cookie到响应,而且还使用了getQueuedCookies()方法(注:和queue方法同属于CookieJar类),后来搜索后发现,标准框架里面,该类作为web中间件是被默认开启的,但是被人给注释掉了,哭~
好了,cookie种植已经解决,但是有个问题需要思考一下,之前一般用的中间件都是在执行控制器之前执行,为什么这个中间件是在之后执行呢?
关键点在于这里:
没错,就是$next($request),这里应该是把请求转发到下一个步骤了,也就是控制器,控制器执行完毕,返回一个响应类,如果需要在控制器执行完毕之后处理响应,就可以对返回的response进行相关操作了,总结完毕~

laravel框架cookie应用到中间件的理解的更多相关文章

  1. 装饰器模式以及Laravel框架下的中间件应用

    Laravel框架的中间件使用:从请求进来到响应返回,经过中间件的层层包装,这种场景很适合用到一种设计模式---装饰器模式. 装饰器模式的作用,多种外界因素改变对象的行为.使用继承的方式改变行为不太被 ...

  2. 关于laravel框架的跨域请求/jsonp请求的理解

    最近刚接触laravel框架,首先要写一个跨域的单点登录.被跨域的问题卡了两三天,主要是因为对跨域这快不了解,就在刚才有点茅塞顿开的感觉,我做一下大概整理,主要给一些刚接触摸不着头脑的看,哪里写得不对 ...

  3. laravel框架的中间件middleware的详解

    本篇文章给大家带来的内容是关于laravel框架的中间件middleware的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. laravel中间件是个非常方便的东西,能将一些逻辑 ...

  4. 关于Laravel框架

    第1讲-Laravel介绍 1.1 什么是Laravel laravel是目前一个比较主流的框架,现在很多互联网的公司都在使用该框架.该框架的前身是symfony框架 Laravel的定位就是做一个简 ...

  5. laravel框架基础知识总结

    一.laravel简介 laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全:以下是本人在学习过程中记录的laravel比较基础的资料,权当学习笔记,请大神们多多指教 ...

  6. laravel框架学习笔记

    一.laravel的安装 1.composer 作用:主要管理php中的依赖关系(类似于yum源) 可以安装的软件: curl    //主要用到微信开发中 upload //文本操作 excel / ...

  7. 关于Laravel框架中Guard的底层实现

    1. 什么是Guard 在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用.而登录/注册认证的核心就是: 用户的注册信息存入数据库(登记) 从数据库中读取数据和用户 ...

  8. [php]laravel框架容器管理的一些要点

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  9. php的laravel框架快速集成微信登录

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_provider,详细的介绍请往下阅读. 本文面向的是php语言laravel框架的用户,介绍的是 ...

随机推荐

  1. 远程调用其它站点并设置cookie

    远程调用其它站点并设置cookie: 参考js var domainArray = [ {site:'g.com',action:'/b.do?c' } ,{site:'www.baidu.com', ...

  2. BigDecimal四舍五入使用总结

    //BigDecimal四舍五入double f1 = new BigDecimal(1).setScale(2,RoundingMode.HALF_UP).doubleValue();//转化成字符 ...

  3. Android混淆

    一.为什么要混淆 为了避免apk在发布后被用户通过反编译拿到源代码和资源文件,然后修改资源和代码之后就变成一个新的apk.而经过混淆后的APK,即使被反编译,也难以阅读,注意混淆不是让apk不能阅读, ...

  4. 解决VMware虚拟机不能上网的问题

    这是其中一种情况,因为使用360等加速的时候把VMware 的DHCP等服务关闭了,重新启动服务即可,方法是WIN+R 输入cmd,在doc输入services.ms打开服务,找到 把这些都启动即可

  5. Vim按Esc后光标左移问题的解决

    参考了这篇文章http://vim.wikia.com/wiki/Prevent_escape_from_moving_the_cursor_one_character_to_the_left 在Vi ...

  6. 6位密码框js

    !DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content=&quo ...

  7. 错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用户权限问题

    错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用 ...

  8. Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  9. 为Dynamics 365启用部署级的跟踪以及跟踪文件的定期删除

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复260或者20170712可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  10. 关于移动APP与Web APP的测试重点以及区别

    Web app测试重点: 1. 功能测试:功能的实现是否满足需求. 2. 性能测试: 2.1 链接速度测试:测试页面链接的速度 2.2 负载测试:web应用系统能允许多少个用户同时在线?超过这个数量会 ...