以上是我们过去几周所遇到的问题。
1 /我们的设置
2 /问题
问题出现在我们的第一个应用程序上。
我们的一些用户报告说他们有时会在几分钟后断开连接(当会话设置为持续3小时时)。它可能会在同一天发生几次,然后几天没有断开,但问题总是会回来。 到目前为止受影响的用户比例很小,但我希望在它“传播”给其他用户之前解决这个问题。
问题似乎发生在应用程序的不同位置,尽管我们已经确定了大多数错误发生的3个scenarii:
我们试图重现用户描述的不同场景:有时我们已经能够,但大多数时候我们没有任何问题,这使得调试变得困难。
其他说明:
3 /技术分析
当发生断开连接时,用户将被重定向到“您的会话已过期或您无权查看”页面。加载此页面后,我们会收到一封带有$ _SESSION变量转储的技术电子邮件。
当会话以正常方式过期时,我们收到的电子邮件显示$ _SESSION变量为空(正常行为)。 当发生意外断开时,有趣的是$ _SESSION并非完全为空:在数组包含的~20个元素中,只剩下一个(总是相同)。
因此,这意味着会话未过期,但没有足够的数据来“识别”用户,因此显示“无权限”页面。作为确认,当发生这种情况时,我们可以检查memcached,该会话仍然保存一些数据。
这些是我们到目前为止已经确定的潜在问题,以及我们为排除这些问题所做的工作:
所以我们不知道导致这个问题的原因,因为它似乎是随机出现的,所以我的问题是:
感谢您的帮助。
答案 0 :(得分:1)
我认为你不会得到你问题的明确答案。可能的原因太多,您没有显示任何代码。
不过,我的猜测是你已关闭memcached.sess_locking,或者如果你有自定义会话实现 - 它根本没有实现锁定。
最终,这会导致两个同时发出的HTTP请求之间存在竞争条件。
我的猜测是基于经常看到的关闭锁或尽快释放它们的不良建议,以达到更高的性能。
答案 1 :(得分:0)
如果“突然”发生此问题,请检查更改内容。你在申请上做过什么工作吗?如果是,请检查已提交的代码(您谈到了自动化工具,因此我希望有一个存储库可以准确找到代码更改)。 你在服务器上有什么改变吗?像升级软件,升级/更改硬件,更改其他两个应用程序? 想到一件事,你检查了用于缓存的驱动器吗?它可能是文件系统的损坏部分。这将解释随机用户部分。
我经常做的几件事是:
答案 2 :(得分:0)
它可以像使用会话的WordPress插件一样简单,并使用不同的值调用session_name()
或session_id()
,将自定义应用程序与默认会话设置重叠。
由于WordPress本身不使用会话,因此插件通常是从具有会话自由的角度编写的。我刚刚在一个WordPress测试网站上进行了搜索,发现了一个画廊插件中使用的会话,一个用于在页面上放置背景图像的插件,一个购物车插件,以及我正在编写的插件,需要从一个上传文件管理页面到另一个。