【问题标题】:How to restrict refresh option?如何限制刷新选项?
【发布时间】:2010-12-30 06:27:37
【问题描述】:

有问题。我不希望人们能够刷新我网站上的一个页面。我该怎么做?

【问题讨论】:

  • 你的意思是“刷新”就像“在他们的浏览器中重新加载”一样吗?

标签: php mysql refresh option


【解决方案1】:

Refresh 是一种浏览器端解决方案。你不能从服务器端限制它。

实际上你可以做的是使用 PHP 的 SESSION 来真正防止人们访问任何页面两次。

<?php

session_start();

if(!isset($_SESSION['disablethispage'])){
    $_SESSION['disablethispage'] = true;
    // serving the page first time

}else{
    // visited before or page was refreshed

}

但是,如果用户删除了您网站的会话 cookie,他/她仍然能够返回到同一页面。

如果您谈论的是双重发布,您可能需要查看 POST-REDIRECT-GET 解决方案。见:http://en.wikipedia.org/wiki/Post/Redirect/Get

【讨论】:

    【解决方案2】:

    你不能。如果你解释为什么你不希望人们能够刷新页面,也许我们可以解释一个更好的解决方案。

    编辑:

    限制刷新帖子表单的一个很好的解决方案是在提交表单时重定向浏览器。它的工作原理是这样的:

    • 表单在pageA.php并提交给pageB.php
    • pageB.php 做了一个 header("Location: pageC.php");处理表单数据后(302 重定向)
    • 在 pageC.php 上显示用户执行操作的结果。

    结果是如果用户刷新pageC.php,那么表单就不会再次提交。如果用户点击后退按钮然后再次前进,浏览器会重新加载 pageC.php,因此表单也不会提交。

    【讨论】:

    • 我不希望人们刷新 $_POST 表单。我知道我可以用 $_SESSIONS 做到这一点,但我必须找到其他方法。
    【解决方案3】:

    尝试存储他们上次访问该页面的时间,如下所示:

    <?php
    session_start();
    if(isset($_SESSION['last_visit']) && time() - $_SESSION['last_visit'] < 10) {
        die('Wait ten seconds before you reload this page');
    }else{
        $_SESSION['last_visit'] = time();
    }
    ?>
    

    这会将页面加载限制为每十秒一次。

    此方法取决于用户不会清空其 cookie,因此如果您需要更严格的解决方案,您必须检查 IP 地址并将其保存在数据库中,但这将需要更多的服务器资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      相关资源
      最近更新 更多