laravel session 自动更新疑惑

WBOY
Libérer: 2016-06-06 20:11:23
original
1076 Les gens l'ont consulté

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

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

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

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

求解!

回复内容:

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

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

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

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

求解!

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

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

<code>

        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);  
            }  
        }  

</code>
Copier après la connexion

可以看见,在调用完controller之后,调用了session->save()的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了exit;,那么session是不会被保存的,除非主动的写Session::save()才能手工的保存起来。(如果不知道函数调用情况,可以在controller中throw new Exception();,然后在/config/app.php的debug更改为debug=>true。可以看到函数的调用关系。)

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

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!