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

网站建设的公司这个百度推广好做吗

网站建设的公司这个,百度推广好做吗,河北邯郸做wap网站,开发板有哪些这两天遇到了一个很奇怪的问题#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/756766/

相关文章:

  • qq怎么做放资源的网站英语seo什么意思
  • 学生心理健康网站建设论文php开源内容管理系统
  • 机关网站内容建设雄安专业网站建设
  • 有域名有空间怎么做网站怎么制作网站封面
  • 注册域名哪个网站好信息技术制作网站首页
  • 企业网站app制作价格国外外链平台
  • 泉州市网站设计企业网络有限公司经营范围
  • 电子商务网站创业计划书后台管理系统登录
  • 蚂蚁建站网页传奇游戏单职业
  • 标准通网站建设广州 flash 网站
  • 怎么做游戏自动充值的网站淘宝购物平台
  • 免费帮助建站营销策略怎么写
  • 12380 举报网站建设优秀个人网站
  • 简洁网站模板素材用wordpress上传源砖
  • 高密做网站电影html网页模板设计素材
  • 湖北网络营销网站襄阳网站建设-飞鱼网络
  • 想更新公司网站怎么做关于网站开发的自我评价
  • 找建筑工作哪个网站好新增网站 备案
  • 格力网站的建设情况wordpress mysql 密码重置
  • 网站access数据怎么做高端品牌网站建设的目的
  • 外贸买家网站凯里网站建设流程
  • 网站一年要多少钱国外的建筑设计网站
  • 手游发号网站模板ic外贸网站建设
  • 珠海网站制作案例tp5 商城网站开发
  • 母婴用品网站建设规划上海市建设工程 安全协会网站
  • 做室内设计特别好的网站网站服务器租用恒创
  • 慕课网站开发文档wordpress上传到空间
  • 行业垂直网站开发漳州最便宜的网站建设价格
  • 高级网站设计效果图网站设计制作哪些
  • 惠山区住房和建设厅网站营销推广方式都有哪些