search

Home  >  Q&A  >  body text

php - laravel session 自动更新疑惑

1.在登录的时候存储 session (userSession);

2.登录后编辑登录用户信息,编辑完成后并没有重新更新userSession;

3.但是在中间件里,获取session的时候却可以得到编辑后的信息 (获取方式:session('userSession'));

不明白这里是为什么?还是在前边处理的时候哪里有问题....

求解!

PHP中文网PHP中文网2819 days ago138

reply all(1)I'll reply

  • 大家讲道理

    大家讲道理2017-04-10 17:19:06

    找到一遍文章 里边这样写:

    查看调用相关的代码。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()才能手工的保存起来。(如果不知道函数调用情况,可以在controller中throw new Exception();,然后在/config/app.php的debug更改为debug=>true。可以看到函数的调用关系。)

    但是原理还是不明白!!!因为测试的结果 并不是调用完每个controller 都会修改session。

    reply
    0
  • Cancelreply