只是原生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
虽然我已经在第一个请求之后设置了。
我在这里错过了什么吗?
使用数据库作为驱动程序,会话不会保存在数据库中。没有错误输出。数据库实现对于会话表模式是正确的,如文档中所述。
答案 0 :(得分:0)
试试这个代码段。未经测试,但很确定它有效。
if(Session::has('abc'))
{
return Session::get('abc');
} else {
Session::put('abc', 'some value');
return true;
}
答案 1 :(得分:0)
经过多个论坛解决同样的问题后,我通过将会话驱动程序设置为数据库来解决它。
'driver' => 'database',
并在数据库中创建表
CREATE TABLE `sessions` (
`id` varchar(40) NOT NULL,
`last_activity` int(10) NOT NULL,
`data` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;