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自动生成月历代码
Oct 09 PHP
第三节--定义一个类
Nov 16 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
PHP错误和异长常处理总结
Mar 06 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
PHP children()函数讲解
Feb 03 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python 中的lambda函数介绍
2018/10/10 Python
python 用下标截取字符串的实例
2018/12/25 Python
纪律教育学习心得体会
2014/09/02 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
校园运动会广播稿
2014/10/06 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书