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 相关文章推荐
中英文字符串翻转函数
Dec 09 PHP
destoon各类调用汇总
Jun 20 PHP
PHP中echo和print的区别
Aug 28 PHP
php定时执行任务设置详解
Feb 06 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
php实现的http请求封装示例
Nov 08 PHP
php分享朋友圈的实现代码
Feb 18 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 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中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
使用PHP编写发红包程序
2015/07/22 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
bpython 功能强大的Python shell
2016/02/16 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python数据集切分实例
2018/12/08 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python如何对齐字符串
2020/07/30 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
《雨霖铃》教学反思
2014/02/22 职场文书
安全生产责任书范本
2014/04/15 职场文书
民生工作实施方案
2014/05/31 职场文书
中学生学习保证书
2015/02/26 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
护理自荐信
2019/05/14 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL