我安装了一个新的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上的另一篇文章中找到了它。
答案 0 :(得分:1)
当您使用中间件时,大多数会话或身份验证等帮助程序都不可用,因为它们也依赖于中间件来工作。
您应该使用请求中的原始会话:
$request->session()->get('key');
$request->session()->set('key', 'value');