【问题标题】:PHP Know if user is on a pagePHP 知道用户是否在页面上
【发布时间】:2012-12-19 17:45:15
【问题描述】:

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

我知道有在开票时更改数据库中的标志的解决方案,然后使用:

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

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

【问题讨论】:

  • “我想知道用户是否已经打开了一张票以从列表中隐藏这张票”这似乎与标题完全无关。那你想要什么?另外,“完整解决方案”是什么意思?完整的代码?因为如果是这样,我认为你来错地方了,我们通常不会提供完整的代码,而是提供帮助用户改进的建议......而不仅仅是复制。
  • 是的对不起标题,这很难找到好词。我不想要完整的代码,但对我的问题有一些想法。我想确切地知道用户是否打开了票证,并知道用户何时关闭此票证(例如,通过单击历史记录返回按钮,或者他是否关闭了他的导航器)
  • 所以你想检查用户是否不在特定页面上?

标签: php ajax codeigniter session


【解决方案1】:

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

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

顺便请注意,此解决方案需要启用 Javascript,因此您要么强制用户启用它(通过其他方式阻止它),要么在没有页面的几分钟(15-1 小时)后定义加载你关闭票。

【讨论】:

  • 这是一个很好的解决方案,在工单页面上每4分钟调用一次AJAX来更新时间戳,并在PHP脚本中检查这个时间戳是否更新> 4分钟,所以工单必然关闭.我找错方向了,谢谢!
【解决方案2】:

我可以建议几个选项。

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

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

    缺点:不是真的活

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

    优点:开销更少

    缺点:在 IE 和 Android 上不支持,不是真的直播

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

    优势:直播,开销最小

    缺点:在<IE10 & Android 上不支持,在服务器端更难实现。

但是对于“不支持”的问题,有备用技术 (modernizr)

【讨论】:

  • 我不需要“完全实时”的解决方案,但感谢 WebSockets 点,我没有想到这个解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多