php会话数据有时会丢失

Posted

技术标签:

【中文标题】php会话数据有时会丢失【英文标题】:php session data sometimes getting lost 【发布时间】:2014-10-04 09:35:31 【问题描述】:

我们遇到了 php 会话问题。

有时我们的应用程序会丢失会话。无法确定架构。大多数时候 (99,9%) 不会发生错误。

这是一个非常大的应用程序(超过 7,000 个 PHP 页面)。自问题发生以来,源代码未更改。 PHP 在 IIS 7.5 和 Windows Server 2008 上运行。

会话 ID 已从 cookie 正确传输。受影响的会话文件要么不再可用,要么为空或缺少数据。看起来好像数据已被删除,因为文件结构看起来正确。

会话锁定有效。

会话存储在 SAN 上。我们已经将会话临时保存在内部硬盘上。结果一样。

有人有解决问题的想法吗?

亲切的问候

保罗

附言。对不起我的英语!

【问题讨论】:

该用户的所有会话数据丢失还是仅部分会话数据丢失? 您检查过您的会话超时时间吗?会话通常不会永久保留,并且会在一段时间后被清理。 是的,我检查了会话超时。 有些会话完全丢失,有些是空的,有些只是会话数据的一部分。 也许您保存会话的空间不足?它只是在黑暗中拍摄 【参考方案1】:

如果您有会话,请尝试会话处理程序。您可能不想对所有这些页面进行硬编码,但肯定会有一个或多个页面丢失。此外,这归因于浏览器的限制。如果我在 IE 上启动一个会话,然后 Chrome 中的管理员登录将固有地终止第一个会话,因为在恢复 SAN 时不再识别其他会话。顺便说一句,没有提到您的会话超时期限,而是您在谈论(超过 7,000 个 PHP 页面)。我建议您创建一个会话变量并将其传递而不是依赖 cookie,除非您的页面编排发布或更新很多因此您使用 cookie 的原因。不过,您必须首先确保所有变量集都是唯一的。

【讨论】:

【参考方案2】:

您应该检查每个页面是否设置了特定会话。这是一种很好的编程技术。你在你的php代码中使用过它吗? 您可以搜索数据丢失的页面,然后在该页面中应用 php 代码。

    if(isset($_POST['your_session']))
//body;

else
 echo '<script type="text/javascript">'.
        'alert("Session not set !");'.
        '</script>';

通过此代码,您将代表您的会话收到错误。

【讨论】:

以上是关于php会话数据有时会丢失的主要内容,如果未能解决你的问题,请参考以下文章

在php中提交表单后会话丢失其数据或值

PHP、nodeJS 和会话

php会话随机丢失,无法理解为啥

跨域请求,关于后端session会话丢失的解决办法

跨越请求,关于后端session会话丢失的解决办法(转载)

会话数据仅在 Chrome 中丢失