尽管设置了laravel会话返回null

时间:2012-12-07 10:06:59

标签: php session laravel

只是原生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虽然我已经在第一个请求之后设置了。

我在这里错过了什么吗?


修改

使用数据库作为驱动程序,会话不会保存在数据库中。没有错误输出。数据库实现对于会话表模式是正确的,如文档中所述。

2 个答案:

答案 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;