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和ACCESS写聊天室(十)
Oct 09 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
php控制文件下载速度的方法
Mar 24 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 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的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
python执行子进程实现进程间通信的方法
2015/06/02 Python
python简单分割文件的方法
2015/07/30 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python中比较两个列表的实例方法
2019/07/04 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
财政专业大学生职业生涯规划书
2014/09/17 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
义诊活动通知
2015/04/24 职场文书
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL