Laravel - 没有持久存储数据库驱动程序的会话

时间:2016-05-31 13:43:32

标签: php mysql database laravel session

我正在使用Laravel 5.1,直到现在我一直在使用默认文件驱动程序在我的项目中存储会话。

现在由于某些原因我决定切换到数据库驱动程序,因此,根据official documentation,我更改了config / session.php中的以下行

'driver' => 'database'

我在我的数据库中创建了会话表,当我开始浏览我的网站时,我可以在新表中看到一些数据:

The screenshot of my sessions table

但我现在无法从会话中获得任何数据!这些是我正在遵循的步骤:

我将数据存储到会话中:

session( [ 'mykey' => 'mydata' ] );

当我移动到另一个页面时,我试图恢复我的数据。

$data = session( 'mykey' ); // this is always null

问题是输出将始终为null。 如果我回来使用默认的文件会话驱动程序,一切都按预期工作,我可以从会话中获取我的存储值。

我的config / session.php中的其他值是默认值:

'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'path' => '/',
'domain' => null,
'secure' => false,

我错过了配置中的内容吗?

3 个答案:

答案 0 :(得分:1)

Laravel在会话持久化https://github.com/laravel/framework/issues/6506

方面存在问题

您必须在每次会话后添加,更新或删除Session::save(),如下所示

$id = Input::get('id');
Session::forget('cart.' .$id);
Session::save();

答案 1 :(得分:1)

经过几个小时的研究,在过去的几年里,我多次出现这种情况,我已经确定在安装带有作曲家的laravel时会出现间歇性问题。 laravel团队已经不乏关于此的报道,但是他们坚持认为他们无法复制它已经使问题被忽略,因为版本4可能更长。

虽然有很多帖子都有关于如何解决这个问题的建议,但最可靠的方法是在你意识到会话没有表现的时候简单地启动一个新实例。我认为它与某些文件或编码被破坏有关。新安装每次都会解决这个问题。

答案 2 :(得分:0)

我可能刚刚找到了解决问题的方法。我正在写它作为答案,所以如果有人遇到同样的问题,这可能会有所帮助。

基本上我在会话中保存了很多东西(整个模型集合)。这当然是一个非常糟糕的主意。

这是在搜索页面中发生的,因此根据我获得的结果数量,有时用户甚至被从他记录的会话中踢出,因为我在会话中保存了所有结果。

通过仅存储找到的模型的ID并在运行时检索它们来重构代码是正确的做法。

相关问题