Laravel - 访问 API 中的会话变量

dus*_*_bg 2 php api session-variables laravel-5

我有一个简单的应用程序,我希望能够更改语言。在我的主控制器中我有:

session(['applocale' => 'en']);
$request->session()->put('applocale','en');
Run Code Online (Sandbox Code Playgroud)

我知道这两行是相同的,但我想确保它们都不起作用。

然后我有API方法:

public function switchLang(Request $request, $lang)
{
    error_log("Current language is: " . session('applocale'));
    error_log("Current language is: " . $request->session()->get('applocale'));
}
Run Code Online (Sandbox Code Playgroud)

这里 error_log 没有显示任何内容。

我正在关注这个线程:Laravel 5.3 - How to add Sessions to APIwithout CSRF? 在 Debugbar 中,我可以看到我的 API 函数已命中中间件“会话”,但会话变量不存在。

这就是我的“季节”中间件的样子:

'sessions' => [
    \Illuminate\Session\Middleware\StartSession::class,
]
Run Code Online (Sandbox Code Playgroud)

它实际上同时触及“api”和“sessions”中间件。

有什么想法我做错了吗?

Ish*_*aan 6

这对我有用(Laravel-5.7)。

首先将api中间件组更改为 -

'api' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    'throttle:60,1',
    'bindings',
],
Run Code Online (Sandbox Code Playgroud)

在App\http\kernel.php。

参考这里。

  • 我现在可以访问我的会话数据。也在 laravel 6 中工作。谢谢 :) (2认同)