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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
PHP Document 代码注释规范
Apr 13 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
php缓存技术详细总结
Aug 07 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
PHP加密解密类实例分析
Apr 20 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
PHP实现APP微信支付的实例讲解
Feb 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
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
详解Python多线程
2016/11/14 Python
python中id函数运行方式
2020/07/03 Python
Python发送邮件实现基础解析
2020/08/14 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Python进行特征提取的示例代码
2020/10/15 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
全球虚拟主机商:HostGator
2017/02/06 全球购物
个人对照检查材料思想汇报
2014/09/26 职场文书
绵山导游词
2015/02/05 职场文书
工会积极分子个人总结
2015/03/03 职场文书
postgresql中如何执行sql文件
2023/05/08 PostgreSQL