php laravel session,当laravel获取不到session的三种解决办法

说到PHP估计有些朋友还有些熟悉,但是对于PHP下的laravel就表示不知道了。有些人因为需要使用到laravel时,却发现过程中出现了问题,那就是session无法获取了,鼓捣了半天也不得其法,让人气恼不已。面对这样的情况我们应该怎么办呢?下面小编就给大家分享一下具体的示例代码,有需要的朋友可以收藏下来。

2fa722f0cb8ac2215c0e1cc757b52ce8.png

问题:引用第三方类库时,使用全局函数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操作太频繁的,影响性能的。

class Middlewareimplements 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);

}

}

查看调用相关的代码。laravel编译后,在bootstrap/compiled.php中

可以看见,在调用完controller之后,调用了session->save()的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了exit;,那么session是不会被保存的,除非主动的写Session::save()才能手工的保存起来。或者把die();exit();换成return!

以上就是今天给大家分享的关于laravel无法获取session了应该怎么办的具体解决教程了,相信大家如果再遇到这个问题就再也不用心烦了,只要按照示例说的来进行操作那么就能轻松解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值