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 相关文章推荐
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
php类的扩展和继承用法实例
Jun 20 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 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 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Python lambda表达式用法实例分析
2018/12/25 Python
Puppeteer使用示例详解
2019/06/20 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
浅析Python 序列化与反序列化
2020/08/05 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
《桂林山水》教学反思
2014/02/08 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
先进单位事迹材料
2014/12/25 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis