我正在使用laravel 5.4。在控制器的方法中,我在会话中设置了一个值。如果我在设置会话之后立即拨打dd()
,dd()
会显示我刚刚设置的会话的所有会话。但是,如果我从另一种方法获取会话,会话不可用。如果我从会话设置器方法中删除dd()
,我正确地获取会话。如果使用dd方法,Laravel 5.4会话未被设置
我的代码如下:
public class TestController{
public function setSession(){
session(['test_key' => 'test_value']);//setting up the session
dd(session()->all());//getting the session properly here
}
public function showSession(){
dd(session()->all());//Here we are not getting the session
}
}
如果我们去掉dd()
从setSession()
会议能够正常工作。这是Laravel的错误还是故意的。我很想知道这个事实的根本原因。由于
在'dd()'调用之前'session()'方法是否已经将值保存到了会话中?还需要什么操作来完成它的实现。 – Imran
不,Laravel首先收集所有需要写入会话的数据,并在用户代码执行后保存它们。但是,您可以强制会话立即保存:'session(['key'=>'value']); session() - > save();' – Anton
原因是会话数据是通过'Terminable Middleware'写入的。这就是@安顿所描述的。 – Ohgodwhy