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中heredoc的使用方法
Jun 17 PHP
php汉字转拼音的示例
Feb 27 PHP
yii上传文件或图片实例
Apr 01 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 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
一个用于网络的工具函数库
2006/10/09 PHP
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
python编写计算器功能
2019/10/25 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
python实现超级玛丽游戏
2020/03/18 Python
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
十一个高级MySql面试题
2014/10/06 面试题
会计顶岗实习心得
2014/01/25 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
商场父亲节活动方案
2014/08/27 职场文书
中秋节寄语2015
2015/03/24 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android