2

我们的一位客户目前遇到了麻烦。我们的系统在登录后使用 AJAX 请求与服务器进行所有通信。无论在哪里使用 $_SESSION,session_start(); 位于脚本之上 - 包含在 try...catch 中,因为自定义错误处理程序会在错误时引发异常。因此,伪代码如下所示:

//set_error_handler_here
try{
session_start();
//do_something_with $_SESSION
(...)
} catch($e){
//handle error
}

现在,问题是:我们的客户似乎随机丢失了会话,我的意思是 fe $_SESSION['id'] 将抛出“未知索引”错误。Internet Explorer 和 Chrome 都是这种情况。我们已经在各种系统中测试了这个系统几个月,可以确认我们以前没有出现过这个错误。

我们不使用 suhosin。会话到期前的时间内也有活动。有没有人对解决方案有任何想法?

编辑:我最终进行了测试,看看是否设置了 $_COOKIE['PHPSESSID']。isset($_COOKIE['PHPSESSID']) 返回错误。这意味着客户端可能受到某种形式的恶意软件的困扰,考虑到它发生在两个浏览器上。我要感谢所有尝试提供帮助的人,某些选项是我们没有想到的。

4

2 回答 2

1

案例 1
您是否正在验证 http 用户代理?

如果是这样,这可能是一个问题,因为 IE 在兼容模式和正常模式下运行时会使用不同的用户代理。

案例2

你有集群应用服务器吗?所以可能是会话文件存储在一个服务器中而下一个请求转到另一台服务器的情况?

案例3

可能是应用程序级别的错误,其中会话未根据条件或用户或其他东西设置

案例 4
如果您有 iframe,也可能因为您在 iframe 中设置 cookie,浏览器可能会将其视为第三方 cookie 并拒绝它,除非在浏览器首选项中明确设置为

在这种情况下,您需要在尝试设置 cookie 的页面上设置 P3P 标头。

我建议你设置一些虚拟cookie,看看它是否会回来。并且还将会话 cookie 设置为httpcookie,以便无法从 javascript 访问它(假设某些脚本格式错误的 cookie)。

于 2012-05-23T14:35:16.970 回答
1

这可能是一种罕见的情况,但如果有人犯了我犯的同样错误,他可能会受益。

我有同样的问题,php会话丢失了。我没有使用 jquery ajax 而是简单的 xmlhttp ajax,但我认为这没关系,在后台会执行相同的步骤。

我在停止为我的 ajax 请求使用 IP 地址后解决了这个问题,所以从这里开始:http://1.2.3.4/index.php?somekey=somevalue我去了这个:http://www.example.com/index.php?somekey=somevalue

于 2014-08-01T10:41:47.370 回答