Heim >Backend-Entwicklung >PHP-Tutorial >Verwirrung über die Laravel-Sitzung, ich hoffe, Experten können es lösen

Verwirrung über die Laravel-Sitzung, ich hoffe, Experten können es lösen

WBOY
WBOYOriginal
2016-08-26 10:12:54917Durchsuche

In laravel5.* wird der Sitzungsstart in Web-Middleware platziert, wie z. B.

<code>    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,   //<---------
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];</code>

Und gemäß dem Code zum Laden der Route-Middleware können wir wissen, dass der Controller die Middleware erst nach der Erstellung aufruft

<code>    /**
     * Get the middleware for the route's controller.
     *
     * @return array
     */
    public function controllerMiddleware()
    {
        if (! $this->isControllerAction()) {
            return [];
        }

        return ControllerDispatcher::getMiddleware(
            $this->getController(), $this->getControllerMethod()
        );
    }</code>

Das Problem tritt zu diesem Zeitpunkt auf. Im Konstruktor wird der Benutzer-Anmeldestatus ermittelt. Wenn der Benutzer bereits angemeldet ist, werden die angemeldeten Benutzerinformationen abgerufen und in $this-> gespeichert ;login_user_info für aufzurufende Unterklassen, die Sitzung wurde noch nicht gestartet, sodass die Sitzungs-ID des angemeldeten Benutzers nicht im Konstruktor abgerufen werden kann. Ein Teil des Codes lautet wie folgt:

<code>/**
 * 控制层公有方法集合
 * Class BaseController
 */
abstract class BaseController extends Controller
{

    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public $login_user_info;
    public $login_subuser_info;

    public function __construct()
    {
        $this->userModel    = app(UserModel::class);
        if (session()->get('user_id')) {
            $this->login_user_info          = $this->userModel->getLoginUser();
            //设置模板全局变量
            view()->share(['login_user_info' => $this->login_user_info]);
        }
    }</code>

Ich habe getestet, dass die Sitzung in der Middleware abgerufen werden kann, da der StartSession-Middleware-Code zu diesem Zeitpunkt ausgeführt wurde. Es ist eine lange Geschichte, warum ich das tun möchte Schaltet das Framework auf Laravel um. Um die ursprüngliche Logik so weit wie möglich beizubehalten, und es einige seltsame Schreibmethoden gibt, wird Auth vorerst nicht verwendet. Gibt es eine Möglichkeit, die Sitzung im Konstruktor abzurufen? Bitte helfen Sie mir, danke

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn