Laravel 5.1 随机删除会话数据

2024-01-26

我的 Laravel 5.1 应用程序遇到一个奇怪的问题。

它间歇性地丢弃会话数据。我通过编写一些中间件来检测到这一点,该中间件将该请求的会话内容写入日志文件。虽然会话 ID (Session::getId()) 不变,其值_token在检索到的会话数据中Session::all() does.

正如我所说,这种情况间歇性地发生。我可以多次刷新同一个 URL,然后随机刷新一次,会话数据就消失了,然后_tokenvalue 与之前的请求不同。

什么会导致这种情况呢?我还注意到flash对象不在“删除”的会话数据中。

以下是日志的片段。您可以看到该内容session_datakey 在最后两行中随机改变“形状”,但会话 ID 保持不变。

另外,不确定这是否相关,但我有DebugBar https://github.com/barryvdh/laravel-debugbar已启用。

UPDATE:通过调试,我发现在某些页面加载会话完全empty,如,不_token(因此生成了一个新的)。没有什么。


  1. 如果您使用文件驱动程序,则可能会遇到并发请求的竞争条件。然后文件被截断,Laravel 无法读取它,因此它会刷新会话。竞争条件还可能导致一种症状,即您在会话中放入的内容没有被放入。这往往是随机的,因此很难调试。根据 Laravel 团队的说法,这是文件驱动程序的一个已知限制,并且似乎尚未得到修复,因此我建议使用不同的驱动程序。这将解决随机会话刷新的问题,但它仍然引入了对未添加的会话进行更改的可能性。据我所知,在 Laravel 5.1 中,您必须自己管理。

  2. 不知何故,您的会话数据太长并且被截断。如果您使用数据库驱动程序(尚未测试其他驱动程序),并且尝试保存比字段长度长的会话数据,则后续请求将无法从此会话中提取数据,并且您将陷入困境开始新的会话。如果此问题是在会话数据非常短的情况下随机发生的,则可能是上面列出的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 5.1 随机删除会话数据 的相关文章

随机推荐