laravel获取不到session的三种解决办法【推荐】


Posted in PHP onSeptember 16, 2018

问题:引用第三方类库时,使用全局函数session()可以保存session,但是获取不到

1、路由置于 web 中间件下,修改app/Http/Kernel.php文件,如下

protected $middlewareGroups = [
  //中间件web
  'web' => [
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   //看到这里了吗!StartSession!!!!要把路由放在这个中间件了才会启动Session!!
   \Illuminate\Session\Middleware\StartSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,
  ],
 
  'api' => [
   'throttle:60,1',
  ],
 ];

2、修改路由写法,如下

//两种路由中间件写法各人喜好!
Route::get('/', function () {
 //路由放在这里
})->middleware('web');
 
Route::group(['middleware' => ['web']], function () {
 //路由放在这里
});
//routes.php

3、Laravel不用php原生的session,那么在controller之后应该做了一些事情,将session写入到文件中,而不是每次put操作都写操作,这样会IO操作太频繁的,影响性能的。

查看调用相关的代码。laravel编译后,在bootstrap/compiled.php中

class Middleware implements HttpKernelInterface
{
 ...
 public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
 {
  $this->checkRequestForArraySessions($request);
  if ($this->sessionConfigured()) {
   $session = $this->startSession($request); // 启动session
   $request->setSession($session);
  }
  $response = $this->app->handle($request, $type, $catch); // 调用controller的method
  if ($this->sessionConfigured()) {
   $this->closeSession($session);   //关闭session
   $this->addCookieToResponse($response, $session);
  }
  return $response;
 }
 ...
 
 protected function closeSession(SessionInterface $session)
 {
  $session->save(); // 保存session
  $this->collectGarbage($session);
 }
}

可以看见,在调用完controller之后,调用了session->save()的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了exit;,那么session是不会被保存的,除非主动的写Session::save()才能手工的保存起来。或者把die();exit();换成return!

PHP 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
PHP4.04简明安装
Oct 09 PHP
其他功能
Oct 09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
PHP读取Excel类文件
May 15 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 #PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 #PHP
PHP中创建和编辑Excel表格的方法
Sep 13 #PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 #PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 #PHP
详解php用static方法的原因
Sep 12 #PHP
php实现数字补零的方法总结
Sep 12 #PHP
You might like
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
php中数组最简单的使用方法
2020/12/27 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
运动会通讯稿50字
2014/01/30 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
党员公开承诺书范文
2014/03/25 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
学校安全管理责任书
2014/07/23 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
小学运动会开幕词
2015/01/28 职场文书
工会经费申请报告
2015/05/15 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书