IT이야기

Larabel에서 세션 값을 검색하면 null이 반환됩니다.

cyworld 2022. 6. 20. 21:47
반응형

Larabel에서 세션 값을 검색하면 null이 반환됩니다.

Laravel 어플리케이션에서 세션 값을 설정 및 취득하려고 합니다.Vue Js 프런트엔드가 세션 값을 설정하는 Larabel 엔드포인트에 API 콜을 발신하고 있습니다.Larabel 엔드포인트의 메서드를 포함하는 컨트롤러는 다음과 같습니다.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
Use Session;

use App\User;

class UserController extends Controller
{
    public function adduser(Request $request) {

        $user = User::where( 'sub', $request->sub )->first();

        if(!$user) {

            $user = new User();

            $user->nickname = $request->nickname;
            $user->name = $request->name;
            $user->sub = $request->sub;
            $user->api_token = $request->api_token;

            $user->save();

        }

        $user->api_token = $request->api_token;
        $user->save();

        return response()
            ->json([
                'done' => $user->api_token
            ]);

    }

    //The endpoint for this method is http://localhost:8000/api/set
    public function setSession(Request $request) {


        $request->session()->put('info', 'testing vue client again');
        Session::save();

        return response()
            ->json([
                'done' => session('info')
            ]);

    }
    //The endpoint for this method is: http://localhost:8000/api/get
    public function getSession(Request $request) {

        $value = $request->session()->get('info');
        return response()
            ->json([
                'done' => $value
            ]);

    }

}

세션 데이터는 정상적으로 설정되어 있습니다만, 이 데이터를 취득하려고 하면,getSession()메서드가 null을 반환합니다.세션 데이터를 검색하는 데 사용한 Vue Js/axios 코드 조각입니다.

axios({
 method: 'get',
 url: 'http://localhost:8000/api/get',


}).then((res) => {
console.log(res.data)
})

이 문제를 해결하려면 어떻게 해야 하나요?고마워요.

문제가 재현되어 쿠키에 문제가 있는 것 같습니다.이게 날 속였어

앱\Http\미들웨어\Encrypt Cookies.php

protected $except = [
    'laravel_session',
];

바꾸다laravel_session고객님께config('session.cookie')가치.

갱신 시 세션 ID 변경 참조(Larabel 5.4 + AngularJS 1.6)

routes/api.php 파일로부터의 루트에는 디폴트로StartSessionAPI 호출이 스테이트리스로 간주되기 때문에 미들웨어가 필요합니다.이 미들웨어는 다음과 같이 추가할 수 있습니다.EncryptCookiesapi middleware group으로 이동합니다.app/Http/Kernel.php다음과 같은 파일(정확한 시퀀스):

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        'throttle:60,1',
        'bindings',
    ],
];

저는 좋아요.또, 셋업 할 수 있다고 생각합니다.api정확히 로 분류하다.web그룹화해 주세요.

또한 세션 변수를 새 구성으로 다시 설정하는 것도 잊지 마십시오.

언급URL : https://stackoverflow.com/questions/53024651/retrieving-a-session-value-in-laravel-returns-null

반응형