【发布时间】:2012-11-25 12:03:18
【问题描述】:
只是原生php中的一个简单函数
protected function some_function(){
session_start();
if(!isset($_SESSION['a']))
{
$_SESSION['a'] = 'some value';
return true;
} else {
return $_SESSION['a'];
}
}
在第一次运行时,它将按预期返回 bool(true) 和 "some value"。
对 laravel 会话应用同样的,
protected function some_function(){
$a = Session::get('abc');
if(is_null($a)){
Session::put('abc', 'some value');
//return Session::get('abc');
return true;
} else {
return $a;
}
}
按照逻辑,在第一次运行时,$a 将是 null。然后将"some value" 放入abc 键中并按预期返回bool(true)。
但是在随后的访问中,Session::get('abc')每次都返回 null。因此每次尝试都返回 bool(true)。
我认为可能是会话没有正确写入,所以我在设置后立即检查了获取键值。
通过注释掉上面代码中的行,它返回我在Session::put('abc') 中输入的任何值。 所以写入数据没有错误。
问题这里试图检索值总是返回null,尽管我在第一个请求之后设置了。
我错过了什么吗?
编辑
使用数据库作为驱动程序,会话不会保存在数据库中。没有错误输出。文档中描述的会话表模式的数据库实现是正确的。
【问题讨论】:
-
您是否正确设置了会话配置?例如,是否设置了应用程序密钥? laravel.com/docs/session/config
-
@nerdklers 我现在正在使用
file驱动程序。应用程序密钥已设置。 -
你还有这个问题吗,因为我也有类似的问题
-
@mattl 不。我无法解决它,不得不创建自己的库。但是最新版本没有它并且工作得很好。需要考虑的一件事。在会话中放置一些东西时,不要过早退出。假设如果我在会话中放入一些东西并调用
dd(),它将无法保存。如果您确实需要保存,则需要在输入值之后但在退出之前手动调用Session::save()。让我知道是否难以理解。 -
我还发现使用带有
Session::get()方法的默认响应已经取代了其他正在起作用的 put 方法的情况。