4

只是原生 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"输入abckey 并按预期返回 bool(true) 。

但是,在随后的访问中,Session::get('abc') 每次都返回 null。所以每次尝试都会返回 bool(true)。

我认为可能是会话没有正确写入,所以我在设置后立即检查了获取键值。

通过注释掉上面代码中的行,它返回我输入的任何值Session::put('abc')所以写入数据没有错误。

这里的问题是尝试检索始终返回的值,null尽管我在第一个请求之后设置。

我在这里错过了什么吗?


编辑

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

4

2 回答 2

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;
于 2013-06-27T13:24:38.023 回答
0

试试这个片段。未经测试,但很确定它有效。

if(Session::has('abc'))
{
    return Session::get('abc');
} else {
    Session::put('abc', 'some value');
    return true;        
}
于 2012-12-07T10:15:03.160 回答