Laravel:中间件中的会话不可更改?

时间:2017-10-04 09:17:17

标签: php laravel-5.5

我安装了一个新的Laravel 5.5应用程序。我将welcome.blade.php的内容更改为

{{ session('test') }}

并创建了一个中间件SetSession.php,我也将其包含在Kernel.php

<?php

namespace App\Http\Middleware;

use Closure;

class SetSession
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        session(['test' => 'A']);


        return $next($request);
    }
}

如果我去浏览器,我会得到输出

  

A

如果我现在将中间件更改为

session(['test' => 'B']);

我仍然得到输出

  

A

而不是B。我甚至将中间件改为

public function handle($request, Closure $next)
{

    session(['test' => 'B']);
    dd(\Session::all());


    return $next($request);
}

,输出

  

数组:1 [▼&#34; test&#34; =&GT; &#34; B&#34; ]

在输出中再次删除dd(..)命令结果

  

A

为什么输出B没有显示?

我使用了documentation中描述的商店方法。我在文档中找不到命令\Session::all(),但我在SO上的另一篇文章中找到了它。

1 个答案:

答案 0 :(得分:1)

当您使用中间件时,大多数会话或身份验证等帮助程序都不可用,因为它们也依赖于中间件来工作。

您应该使用请求中的原始会话:

$request->session()->get('key');
$request->session()->set('key', 'value');