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 相关文章推荐
mysq GBKl乱码
Nov 28 PHP
实用函数2
Nov 08 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
php防盗链的常用方法小结
Jul 02 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
header导出Excel应用示例
Jan 24 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
php图片添加文字水印实现代码
Mar 15 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
实例讲解PHP表单
Jun 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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
return false;和e.preventDefault();的区别
2010/07/11 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
利用Python检测URL状态
2019/07/31 Python
python 5个实用的技巧
2020/09/27 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
大学生学业生涯规划
2014/01/05 职场文书
房产公证委托书范本
2014/09/20 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
稽核岗位职责范本
2015/04/13 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
Python中字符串对象语法分享
2022/02/24 Python