>  기사  >  백엔드 개발  >  Laravel 세션에 대한 혼란, 전문가가 해결할 수 있기를 바랍니다

Laravel 세션에 대한 혼란, 전문가가 해결할 수 있기를 바랍니다

WBOY
WBOY원래의
2016-08-26 10:12:54879검색

laravel5.*에서는 세션 시작이

과 같은 웹 미들웨어에 배치됩니다.
<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>

그리고 Route loading 미들웨어의 코드에 따르면 컨트롤러는 미들웨어가 만들어진 후에만 호출한다는 것을 알 수 있습니다

<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>

이때 문제가 발생합니다. 생성자에 사용자 로그인 상태가 결정됩니다. 사용자가 이미 로그인되어 있으면 로그인된 사용자 정보가 $this->에 저장됩니다. ;login_user_info 첫 번째 컨트롤러를 만들면 세션이 아직 시작되지 않았으므로 생성자에서 로그인한 사용자의 session_id를 얻을 수 없습니다.

<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>

이때 StartSession 미들웨어 코드가 실행되었기 때문에 미들웨어에서 세션을 얻을 수 있는지 테스트해봤습니다. 프레임워크를 laravel로 전환하므로 원래 논리를 최대한 유지하기 위해 이상한 작성 방법이 있으므로 현재로서는 Auth를 사용하지 않습니다. 생성자에서 세션을 가져올 수 있는 방법이 있습니까? 도와주세요, 감사합니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.