eCo*_*Evo 16 php session laravel laravel-4
我尝试运行以下代码:
Session::put('progress', '5%');
dd(Session::get('progress'));
Run Code Online (Sandbox Code Playgroud)
这将在转储中显示"5%".
如果我重新运行同一页面但注释掉Session::put('progress', '5%');以便只dd()调用该行,则会得到一个空值而不是前一页面加载中存储的5%值.
这是我的会话配置,所以我知道应该存储数据:
'driver' => 'native',
'lifetime' => 120,
'expire_on_close' => false,
Run Code Online (Sandbox Code Playgroud)
为什么Laravel不在页面加载中存储会话数据?
Rub*_*zzo 45
问题是因为你在Laravel完成其应用程序生命周期之前杀死了脚本,所以放入会话(但尚未存储)的值也被杀死了.
当Laravel应用程序生命周期开始时,任何价值put在Session尚未存储到应用程序生命周期结束.也就是说,当任意值put在Session将最后/真的stored.
如果您检查源,您将发现相同的上述行为:
public function put($key, $value)
{
$all = $this->all();
array_set($all, $key, $value);
$this->replace($all);
}
Run Code Online (Sandbox Code Playgroud)
如果要测试它,请执行以下操作:
在会话中存储值而不会终止脚本.
Route::get('test', function() {
Session::put('progress', '5%');
// dd(Session::get('progress'));
});
Run Code Online (Sandbox Code Playgroud)检索已存储的值:
Route::get('test', function() {
// Session::put('progress', '5%');
dd(Session::get('progress'));
});
Run Code Online (Sandbox Code Playgroud)小智 27
鲁本斯·马鲁佐的回答非常好.我只想补充一点,如果您需要立即存储数据,可以使用save方法:
Session::put('progress', '5%');
Session::save();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17965 次 |
| 最近记录: |