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表单转换textarea换行符的方法
Sep 10 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
深入PHP magic quotes的详解
Jun 17 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 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
2007/01/15 PHP
php查看session内容的函数
2008/08/27 PHP
thinkPHP查询方式小结
2016/01/09 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
Vue可自定义tab组件用法实例
2019/10/24 Javascript
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
django表单的Widgets使用详解
2019/07/22 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
双十佳事迹材料
2014/01/29 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
摄影展策划方案
2014/06/02 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
先进工作者推荐材料
2014/12/23 职场文书
车间安全生产管理制度
2015/08/06 职场文书
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技