当前位置: 首页 > news >正文

做网站和做免费推广网站的区别大连工业大学是一本还是二本

做网站和做免费推广网站的区别,大连工业大学是一本还是二本,wordpress博客漏洞,高密做网站哪家强价位这两天遇到了一个很奇怪的问题#xff0c;更新session #xff0c;session的值不变。经过一番追查#xff0c;终于找到问题#xff0c;并搞明白了原理。写这篇博客记录下。 框架版本 Laravel 5.4 问题 先来描述下问题#xff0c;我在我们项目基础的Middleware中#xff0…这两天遇到了一个很奇怪的问题更新session session的值不变。经过一番追查终于找到问题并搞明白了原理。写这篇博客记录下。 框架版本 Laravel 5.4 问题 先来描述下问题我在我们项目基础的Middleware中加入session操作存入了一个值再在Controller中取出使用大致代码如下 // Middleware public function handle($request, Closure $next) {$id Redis::get(id);session([id $id]);return $next($request); }// Controller public function index() {$id session(id);return [id $id]; } 假设reids中的id是1这一次访问index这个action返回的是1当你将redis中id的值改成2时在访问发现返回的还是1而且之后的访问也都是1。这里说明一下session使用的是redis 。 解决问题 看到这样神奇的结果百思不得其解。于是打开Xdebug开始调试。经过多次调试发现在执行完\Illuminate\Session\Middleware\StartSession这个Middleware后session里面的值就变回1了在之前都是2。然后想到会不会我们的Middleware在StartSession之前执行造成的将我们的Middleware移到StartSession之后发现果然可以了app/Http/Kernel.php中的代码如下 protected $middlewareGroups [web [\Illuminate\Cookie\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\Illuminate\Routing\Middleware\SubstituteBindings::class,\App\Http\Middleware\OurMiddleware::class,] ]; 其中的OurMiddleware是我们自己写的Middleware之前是放在最上面的$next($request)之前的代码的执行顺序是从上到下的如果OurMiddleware中有些内容是必须在最开始的可以考虑分成两个Middleware。 理解原理 虽然解决了问题但还是不知道其原理究竟是怎样的带着这样的疑问我继续查看源码最终找到了相应的内容。 session不是实时落地的也就是说当你调用session([id $id])时id并没有被真正存入redis中而是缓存在 \Illuminate\Session\Store单例的attributes属性中可以查看其put方法代码如下 php public function put($key, $value null) { if (! is_array($key)) { $key [$key $value]; } foreach ($key as $arrayKey $arrayValue) {Arr::set($this-attributes, $arrayKey, $arrayValue);} } \Illuminate\Session\Middleware\StartSession在执行时回自动加载redis中已经实例化的数据并覆盖\Illuminate\Session\Store单例中的attributes属性所以这就导致我们一直取到的都是redis中的session数据。加载覆盖的代码如下 protected function loadSession() {$this-attributes array_merge($this-attributes, $this-readFromHandler()); } protected function readFromHandler() {if ($data $this-handler-read($this-getId())) {$data unserialize($this-prepareForUnserialize($data));if ($data ! false ! is_null($data) is_array($data)) {return $data;}}return []; }其中的readFromHandler方法就是获取redis中的session数据。 后记 其实这不是Laravel session的坑是我自己踩坑原谅我是个标题党 转载于:https://www.cnblogs.com/CraryPrimitiveMan/p/6654674.html
http://www.zqtcl.cn/news/76690/

相关文章:

  • 中国风古典网站模板品牌网站建设设计公司
  • 伍菲网站建设怎么样开发小程序
  • 界面做的最好的网站做qq链接的网站
  • 如何搭建一个简单的网站什么是企业网站pv
  • 爱站网是干什么的佛山新网站建设策划
  • 兰州网站排名优化公司北京百度推广
  • 企业网站建设的开发方式seoul什么意思
  • 微网站搭建教程英铭长沙网站建设
  • 网站首页制作实验报告中学网站管理系统下载
  • 大连网站如何制作wordpress有中文版吗
  • 手机怎么制作网站教程视频教程网上商城系统的设计与实现
  • 找人做网站注意什么问题网站备案表是什么
  • 锦州网站建设新闻贵州网站建设lonwone
  • 买源码做网站网站制作工作流程
  • 高端网站案例网站建设中国建材建设网站
  • wix做的网站在国内访问不wordpress 插件模板
  • 努比亚网站开发文档外贸网站建设报价差别那么大花钱多吃亏
  • 医疗图片做网站图片有什么做美食的视频网站
  • 烟台企业网站网站里的内容都是什么作用
  • 吉林省建设监理协会网站诚信建设wordpress做在线编辑图片
  • 网站知识架构phpcmsv9中英文网站
  • php安防企业网站源码重庆智能网站建设多少钱
  • 外贸网站要先备案吗网站主页设计模板图片
  • 公明做网站多少钱济南 网站 建设
  • 网站模板在线演示怎么做男女做羞羞的故事网站
  • 行业网站建设优化案例建设网站的企业有哪些
  • 网站方案策划怎么写湖南省建设人力资源网站
  • 惠东做网站报价wordpress主题 彩票
  • WordPress建站教程 网盘如何将网站变成免费
  • 珠海高端网站制作新网站上线