gpt4 book ai didi

php - session 在中间件 Laravel 5 中不起作用

转载 作者:可可西里 更新时间:2023-10-31 22:44:03 24 4
gpt4 key购买 nike

我尝试在 Laravel 5 中间件中使用 session ,但它们无法正常工作。具体来说 - var_dump(Session::all()); 在 handle 方法的开始给我数组一个值 - _tokken,然后在这个方法的末尾

Session::put('lang',$locale);
var_dump(Session::all());

给我的数组有两个值,_tokken 和我的 lang 键,但刷新后它是一样的,据我所知,第二次刷新后应该有相同的结果。

虽然我可能在 Session 中间件之前加载了我的中间件,这是真的,然后我切换了,现在我的 Kernel.php 看起来像这样 -

protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\Language',

];

所以我问 - 我做错了什么?

编辑:在 Illuminate\Session\Middleware\StartSession 中挖掘我发现了这个 -

//Note that the Laravel sessions do not make use of PHP "native" sessions in any way since they are crappy.

作为评论,所以我对 session_status() 的测试不相关。

最佳答案

我遇到了同样的问题,我在登录时使用 session 来存储语言环境,然后重定向到主仪表板,但是当加载中间件时, session 尚未启动。所以这是行不通的。

首先声明,我不是 Laravel 专家,但这种方式适用于 Laravel 5.3:

1) php artisan make:middleware SetApplicationLanguage

2) 将此添加到 app/Http/Kernel.php $middlewareGroup 变量:

\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\SetApplicationLanguage::class,

请注意,这个新的中间件出现在 StartSession 类之后。

3) 这是我的 app/Http/MiddleWare/SetApplicationLanguage.php:

namespace App\Http\Middleware;

use App;
use Closure;
use Illuminate\Support\Facades\Auth;

class SetApplicationLanguage
{

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (isset(Auth::user()->locale)) {
App::setLocale(Auth::user()->locale);
}

return $next($request);
}
}

请注意,在此示例中我没有使用 Session。那是因为当我在 StartSession 类之后添加我的中间件时, session 会工作,但是 Auth::user() 将再次可用,所以我可以只使用 Auth::user()->locale 而根本不需要 session 。

但您可以做到,只需使用 App::setLocale(Session::get('locale')) 代替,因为包括 Session 门面。

关于php - session 在中间件 Laravel 5 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com