2

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

4

3 回答 3

8

刷新是浏览器端的解决方案。您不能从服务器端限制它。

您实际上可以做的是使用 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

于 2009-12-27T12:58:35.657 回答
2

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

<?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 地址并将其保存在数据库中,但这将需要更多的服务器资源。

于 2009-12-27T13:01:46.397 回答
0

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

编辑:

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

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

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

于 2009-12-27T12:59:02.020 回答