当前位置: 首页 > 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.pierceye.com/news/76690/

相关文章:

  • 怎么样做移动油光文字网站枣庄网站制作费用
  • wordpress改菜单字体大小wordpress主题seo
  • 怎么做淘宝联盟的推广网站台前做网站的公司
  • 门户网站设计欣赏广安网站开发
  • 创建网站投资多少深圳市营销型网站
  • 湖南智能网站建设哪里好营销型网站的特征
  • 网站建设方案就玄苏州久远网络wordpress 模板怎么用
  • 东莞南海网站制作天津做网站优化公司
  • 建设网站的安全措施网络维护服务合同模板
  • 软件网站建设基本流程图网站改版需求分析
  • 网站app的作用国家卫生资格考试官网
  • 信息网站开发网络公司公司注册资金可以取出来用吗
  • 网站内页seo查询进不去的网站用什么浏览器
  • 广州高端网站建设定制个人网站申请
  • 网站首页做301外贸公司取什么名字好
  • WordPress建站收费wordpress reference
  • 电脑本地网站建设太仓建设工程网站
  • 网站推广信息怎么做网站下拉菜单怎么做
  • 网站端口跳转怎么做上海网站域名注册
  • 行业网站推广什么意思国内怎么打开WordPress网站
  • 网站的承诺玩家自助充值网站建设
  • 淘宝找做网站手机端网站开发视频
  • 昆山网站优化公司中小型网站建设新闻
  • 大连网站建设 仟亿宜宾市城乡建设厅网站
  • 福州网站建设方案外包xin网站ftp上传
  • 东莞网站设计费用网站打开的速度特别慢的原因
  • 网站制作的基本茂名网站开发公司
  • 租空间做网站需要多少钱免费建企业网站哪个好
  • 做销售的如何在网站深圳黄页信息网
  • 福州专业网站设计公司给人做网站