簡體   English   中英

在Laravel中檢索Session值將返回null

[英]Retrieving a Session value in Laravel returns null

我正在設置並嘗試從Laravel應用程序檢索會話值。 Vue Js前端正在對設置會話值的Laravel端點進行API調用。 包含Laravel端點方法的控制器為:

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

我該如何解決這個問題? 謝謝

默認情況下,來自routes / api.php文件的路由沒有StartSession中間件,因為api調用被認為是無狀態的。 您可以按EncryptCookies將帶有EncryptCookies中間件添加到app/Http/Kernel.php文件中的api中間件組:

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組完全相同。

並且不要忘記使用新配置再次設置會話變量。

我重現了該問題,並且似乎存在Cookie問題。 這對我有用:

app \\ Http \\ Middleware \\ EncryptCookies.php

protected $except = [
    'laravel_session',
];

laravel_session更改為您的config('session.cookie')值。

請參閱刷新時會話ID的更改(Laravel 5.4 + AngularJS 1.6)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM