强制所有用户浏览器刷新

时间:2019-05-24 22:04:45

标签: refresh page-refresh

我有许多日复一日地为许多企业运行的Web应用程序。

应用程序是在远程apache服务器上运行的PHP / MySQL / JS。

多年以来,我一直在深夜不使用该软件时执行更新。

我希望能够在工作时间内对软件进行更新。

我多次要求我的客户确保他们在晚上关闭软件并关闭他们的浏览器-但永远不能保证他们这样做。

我在JS中有一个刷新计时器,可以阻止浏览器在11:59刷新-如果碰巧仍然打开。

但是我希望能够在需要时对所有打开的浏览器执行此刷新。

我已经考虑了几种方法,包括可以读取和重置的cron和数据库值-但是:

我想知道是否有人成功实现了这一目标?

3 个答案:

答案 0 :(得分:4)

您想刷新所有指向xAMP-ish应用程序的打开的浏览器选项卡。一些问题:

  1. 是否需要立即进行刷新,或者可以推迟刷新?也就是说,无论用户如何交互,每个人的标签都需要同时刷新吗?还是等到每个客户的下一个请求都可以接受?

  2. 您可以提前安排刷新(例如,至少有1个会话超时间隔提前时间),还是需要立即触发刷新的方法?

如果您需要立即刷新,并且没有提前安排,那么您就不走运了。唯一的方法是保持开放的通道,以从服务器到客户端进行异步更新,而使用普通的Apache / PHP很难做到这一点(请参见cometwebsockets)。

如果可以推迟刷新(等到用户提交请求),则有几种选择。例如,您可以

  • 使所有会话失效(通过调用一个脚本来删除所有相应的服务器端会话文件;在Linux的/var/lib/php/sessions/中找到)。请注意,您的用户不会喜欢丢失购物车中的内容。
  • 使用JavaScript来检查客户端的version值(在登录时加载,并保存在localStorage或类似值)是否与服务器的传入回复(将从配置文件加载该值)相符或数据库请求)。如果服务器端值已更改,请将可以保存的任何内容保存到localStorage(以避免出现前一种情况),通知用户并刷新页面。

或者,如果您可以通过足够的预警来安排刷新,则可以在服务器答复中包含说明,这些说明将在需要时调用刷新机制。例如,此类回复可能会将您当前的“在11:59:59重置”代码更改为“在$ requested_reset_time重置”。

答案 1 :(得分:0)

据我所知,您希望控制用户何时看到“新鲜”内容以及何时可以缓存内容。如果是这样的话 在您的头部内容中添加以下内容-

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

在收到此标头后,用户的浏览器将自动获取新内容。您可以打开/关闭上述行以满足您的需求。这可能不是实现所需功能的最复杂的方法,但值得尝试。

答案 2 :(得分:0)

在做这样的事情之前,有很多事情要考虑。例如,如果某人正在积极地处理页面,可能是填写表格或其他内容,而您能够刷新其窗口,则可能会带来负面的用户体验。我相信这里的其他一些答案也可以解决其他一些问题。

也就是说,通过使用Launch Darkly功能标志服务,我知道它可以完成。不幸的是,我不了解所有内部工作原理,但是我的理解是该服务使用可观察对象来监视更新。可观察对象与承诺相似,不同之处在于它们不断关注目标的新变化。然后,当目标更新时,您可以强制重新加载页面(或者向用户发出警报,提示您)。