PHP知道用户是否在页面上

时间:2012-12-19 09:04:35

标签: php ajax codeigniter session

我正在使用CodeIgniter在PHP中开发一个Ticker支持客户端,我想知道用户是否已经打开了一张票,以便从列表中隐藏此票证。

我知道在打开故障单时,有一个更改数据库的解决方案,然后使用:

 $(window).unload(function() {
    $.ajax({async:false ..... 
    /* change flag in database */
 });

但是,如果用户的导航器强制关闭怎么办? 我是否需要运行CRON任务才能重置这些标志?您对完整解决方案有什么反馈意见吗?感谢。

2 个答案:

答案 0 :(得分:2)

由于PHP每页加载只运行一次,因此连续检查用户是否仍在所需页面上的唯一方法是需要Javascript + AJAX。怎么样?

每隔1-5分钟,您使用上次更新的时间戳更新数据库中的特定字段(如您所说),并在PHP脚本中检查该字段,以便关闭或保持该票证打开。

请注意,此解决方案需要启用Javascript,因此您要么强制用户启用它(否则通过阻止它),或者在几分钟(15-1小时)之后定义该页面加载你关闭门票。

答案 1 :(得分:0)

我可以提出几个选择。

  • 使用 ajax解决方案 Jeffrey建议。

    优势:易于实施,支持所有浏览器

    缺点:不是真的

  • 使用服务器发送事件(类似于ajax轮询解决方案)

    优势:开销更少

    IE不支持 ; Android,不是真的

  • websockets ,提供完全实时的解决方案。在连接丢失或关闭时建立连接=>发票。

    优势:实时,最少开销

    IE {1}}上不支持

    劣势 Android,在服务器端更难实现。

但是对于“不支持”的问题,有退回技术(modernizr