将网站关闭并踢出用户进行升级的最佳方法是什么?

时间:2009-03-19 23:59:01

标签: php authentication

我很想知道当你想要进行升级并且你有登录的用户时,人们如何踢人或阻止访问网站。

我的想法是将bool设置放在全局文件(例如设置文件)中,以确定该站点是否不可用。 True可用,而false则不可用。如果为false,则下次用户尝试访问该站点时,他们将被注销或仅显示不可用的消息。

我可以通过这种方法看到两个问题:

  1. 如果用户只是填写长篇文章或写大部分文本(如SO上的新问题或答案),一旦他们提交表格,他们就会丢失这些信息。 (不能总是保存它,因为可能已经更改了该表或代码的数据库更改。)

  2. 可能:在繁忙的网站上,编辑全局文件,如果它超过几行,如果该页面在部分上传或保存时加载,则可能导致PHP解析错误。根据配置的不同,文件上可能还存在锁定问题。

  3. 另一种选择是使数据库中的字段具有相同的设置。目前,我通常没有设置表,所以这将是表中唯一的东西,但我可以看到它更快,因为它避免了第二个问题。

    你使用过的东西运作良好还是其他任何想法?

    我正在与LAMP合作。

6 个答案:

答案 0 :(得分:3)

提前通知用户您的站点将在指定时间停机,然后根据您的日志文件在最繁忙的时间执行升级。如果您的网站对您的用户至关重要,那么周末非常适合升级。周日早上凌晨3点左右的停机时间可能不会让太多用户感到愤怒。在升级之前,请确保您拥有所需的一切,以便最大限度地减少停机时间。您甚至可以考虑在测试服务器上进行干运行。

答案 1 :(得分:3)

您可以实现一个状态字段,可能是一个AJAX样式,如StackOverflow页面顶部的橙色条,它会通知用户该网站将在10-15分钟内关闭或者您拥有什么。您还可以在此期间禁用登录。然后只需将网站完全关闭,进行升级,然后重新上线。

答案 2 :(得分:3)

您可能希望利用网络服务器重定向。在Apache的情况下,.htaccess文件将用户重定向(或重写URL)到静态维护页面:

RewriteRule ^updating.*$ $0 [NC,U,QSA,L]
RewriteRule .* /updating/ [NC,U,QSA,R=307,L]

如果您想在维护模式下自己访问该站点,可以将特定且有希望的唯一字符串附加到useragent标头:

RewriteRule ^updating.*$ $0 [NC,U,QSA,L]
RewriteCond %{HTTP:User-Agent} !MY-CUSTOM-UA-STRING [NC]
RewriteRule .* /updating/ [NC,U,QSA,R=307,L]

以下是在firefox中操作用户代理的方法:

创建一个名为about:config的新general.useragent.extra.XYZ密钥,并将其设置为“MY-CUSTOM-UA-STRING”或您希望的任何其他内容。 Firefox会将字符串附加到UA。

如果使用Chrome,请尝试新的移动仿真功能,该功能允许您直接从devtools修改用户代理字符串。

正如您自己提到的,另一种解决方案可能是在服务器端设置配置标志。在此之前,我建议您保存所有用户在网站上正在进行的操作,并让她在维护期后恢复。另外,让他们事先知道确切的维护时间。

答案 3 :(得分:1)

如果不允许新用户登录,并监控已登录用户的数量,直到达到0,那么你可以升级吗?

答案 4 :(得分:1)

这个与Bobby的建议类似。我实现相同类型的方法是将几个值放入数据库中的“config”表中,一个是使系统关闭的日期/时间,另一个是消息。

一旦日期字段不为空,则阻止所有登录,并在每次页面刷新时,只需使用javascript警报向用户显示消息,说明该网站将在X分钟内被删除,原因和应该在Z分钟回到网上。这是一种令人烦恼且面对面的方式,但是他们意识到他们不应该开始填写一个非常长的形式,这非常重要。

在维护开始时间之后,然后在下一页刷新时启动所有用户。 ......当然,除了管理员外。

让所有客户定期轮询服务器以检查即将到来的维护期是否过度,IMO。如果你确实有几个页面有很长的形式,那么可能只是添加AJAX轮询。

在数据库中拥有这些值很容易实现,非常灵活,非常适合这种情况。

答案 5 :(得分:0)

如果您的系统是基于会话的,则一种简单的方法是更改​​会话名称。 cookie名称将更改,没有人会获得新的名称,直到他们再次登录。