laravel获取不到session的三种解决办法【推荐】
问题:引用第三方类库时,使用全局函数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中
classMiddlewareimplementsHttpKernelInterface
{
...
publicfunctionhandle(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;
}
...
protectedfunctioncloseSession(SessionInterface$session)
{
$session->save();//保存session
$this->collectGarbage($session);
}
}
可以看见,在调用完controller之后,调用了session->save()的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了exit;,那么session是不会被保存的,除非主动的写Session::save()才能手工的保存起来。或者把die();exit();换成return!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短