我正在使用CodeIgniter在PHP中开发一个Ticker支持客户端,我想知道用户是否已经打开了一张票,以便从列表中隐藏此票证。
我知道在打开故障单时,有一个更改数据库的解决方案,然后使用:
$(window).unload(function() {
$.ajax({async:false .....
/* change flag in database */
});
但是,如果用户的导航器强制关闭怎么办? 我是否需要运行CRON任务才能重置这些标志?您对完整解决方案有什么反馈意见吗?感谢。
答案 0 :(得分:2)
由于PHP每页加载只运行一次,因此连续检查用户是否仍在所需页面上的唯一方法是需要Javascript + AJAX。怎么样?
每隔1-5分钟,您使用上次更新的时间戳更新数据库中的特定字段(如您所说),并在PHP脚本中检查该字段,以便关闭或保持该票证打开。
请注意,此解决方案需要启用Javascript,因此您要么强制用户启用它(否则通过阻止它),或者在几分钟(15-1小时)之后定义该页面加载你关闭门票。
答案 1 :(得分:0)
我可以提出几个选择。
使用 ajax解决方案 Jeffrey建议。
优势:易于实施,支持所有浏览器
缺点:不是真的
使用服务器发送事件(类似于ajax轮询解决方案)
优势:开销更少
IE不支持 ; Android,不是真的websockets ,提供完全实时的解决方案。在连接丢失或关闭时建立连接=>发票。
优势:实时,最少开销
IE {1}}上不支持劣势 Android,在服务器端更难实现。
但是对于“不支持”的问题,有退回技术(modernizr)