我们的客户目前遇到了麻烦。登录后,我们的系统使用AJAX请求与服务器进行所有通信。在使用$ _SESSION的地方,session_start();在脚本之上 - 它包含在try ... catch中,因为自定义错误处理程序会在出错时抛出异常。因此,伪代码如下所示:
//set_error_handler_here
try{
session_start();
//do_something_with $_SESSION
(...)
} catch($e){
//handle error
}
现在,问题是:我们的客户似乎随机丢失会话,我的意思是f.e. $ _SESSION [' id']会抛出"未知索引" -error。 Internet Explorer和Chrome都是这种情况。我们已经在各个系统中测试了这个系统几个月,并且可以确认我们之前没有遇到过这个错误。
我们不使用suhosin。会议到期前还有活动。有没有人对解决方案有什么想法?
编辑我最终进行了测试,看看是否设置了$ _COOKIE [' PHPSESSID']。 isset($ _ COOKIE [' PHPSESSID'])返回false。这意味着客户端可能会受到某种形式的恶意软件的困扰,考虑到它发生在两个浏览器上。我要感谢所有尝试和帮助的人,某些选项是我们没有想过的。
答案 0 :(得分:1)
案例1
你在验证http用户代理吗?
如果是这样可能会出现问题,因为IE在兼容模式和普通模式下运行时会使用不同的用户代理。
案例2
你有群集应用服务器吗?所以可能是会话文件存储在一个服务器中而下一个请求转到另一个服务器的情况?
案例3
可能是应用程序级错误,其中会话根据条件或用户或其他东西取消设置
案例4
如果您有iframe,也可能是因为您在iframe中设置了Cookie,浏览器可能会将其视为第三方Cookie并拒绝它,除非在浏览器首选项中明确指出
在这种情况下,您需要在尝试设置Cookie的页面上使用P3P标题。
我建议你设置一些虚拟cookie,看它是否会回来。并将会话cookie设置为httpcookie,以便无法从javascript访问它(假设某些脚本错误形成cookie)。
答案 1 :(得分:1)
这可能是一种罕见的情况,但如果有人做了同样的错误我就会受益。
我有同样的问题,php会话丢失了。我不是使用jquery ajax而是使用简单的xmlhttp ajax,但我认为这无关紧要,在后台执行相同的步骤。
我在停止使用ip地址来解决我的ajax请求后解决了这个问题,所以从这个:http://1.2.3.4/index.php?somekey=somevalue
我去了:http://www.example.com/index.php?somekey=somevalue