【问题标题】:Laravel - Sessions not persisting with database driverLaravel - 会话不与数据库驱动程序保持一致
【发布时间】:2016-09-29 13:44:13
【问题描述】:

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

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

'driver' => 'database'

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

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

我将我的数据存储到会话中:

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

当我移动到另一个页面时,我会尝试取回我的数据。

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

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

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

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

我在配置中遗漏了什么吗?

【问题讨论】:

  • 您是否将网络中间件添加到您的路由中?
  • @Jerodev 因为我使用的是 Laravel 5.1,所以没有可用的默认 Web 中间件。我错了吗?
  • 确实,对不起,我的错

标签: php mysql database laravel session


【解决方案1】:

Laravel 的会话持续存在问题https://github.com/laravel/framework/issues/6506

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

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

【讨论】:

  • 那个 Github 问题是两年前的。不需要Session::save() 来保存它们,这由会话中间件自动处理。
  • "Laravel 的会话持续存在问题" 不,我可以向你保证不会。
  • @ceejayoz 在此处关注评论 github.com/laravel/framework/issues/6506#issuecomment-187572981 在 5.1 中仍有问题
  • @ImtiazPabel 我很清楚人们偶尔会遇到会话问题,但解决方案基本上不会是Session::save()。 5.1/5.2 中的解决方案通常与新的中间件组有关。
  • 私有函数 _setSession($name, $val) { session()->set($name, $val);会话()->保存(); } 私有函数 _unsetSession($name) { session()->forget($name);会话()->保存(); }
【解决方案2】:

经过数小时的研究,由于在过去几年中多次出现这种情况,我确定在使用 composer 安装 laravel 时可能会出现间歇性问题。 laravel 团队不乏关于此的报告,但他们坚持无法复制它,这使得问题被忽略了,因为版本 4 可能更长。

虽然有数十篇帖子提供了有关如何解决此问题的建议,但最可靠的方法是在您意识到会话不正常时简单地启动一个新实例。我认为这与某些文件或编码被破坏有关。每次新安装都能为我解决这个问题。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2013-06-08
      • 2016-12-13
      • 2016-06-30
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多