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 相关文章推荐
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
php 调用远程url的六种方法小结
Nov 02 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
ThinkPHP视图查询详解
Jun 30 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
php实现用户登陆简单实例
Apr 04 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
PHP 模拟登陆功能实例详解
Sep 10 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 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
JS获取时间的方法
2015/01/21 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
深入理解Javascript中的this关键字
2015/03/27 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
Django 视图层(view)的使用
2018/11/09 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
期末个人总结范文
2015/02/13 职场文书
汉字听写大会观后感
2015/06/12 职场文书
新郎新娘致辞
2015/07/31 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题