浏览器的后退,前进,刷新(F5或ctrl + R)检查PHP?

时间:2013-04-21 19:25:26

标签: php

我想创建一个页面,如果用户按下,转发或刷新页面,它应该显示无效页面,如果用户点击该页面上可用的链接,则应显示有效页面。

我不想禁用后退和前进按钮。 它应该在PHP中完成

提前感谢。

4 个答案:

答案 0 :(得分:2)

我会使用JavaScript和unload event执行此操作。然后,当用户离开页面时,它的最后一个动作是清除DOM或存储一些cookie,让您测试该页面是后退按钮的结果还是返回页面的链接

答案 1 :(得分:1)

我能想到在PHP中完成此操作的唯一方法是将一次性令牌附加到页面上的每个链接,并在第一次使用时使它们到期。然而,这将需要将它们存储在某处,例如数据库或缓存。

会话也可以,每个页面加载都会生成一个唯一的ID。

答案 2 :(得分:0)

设置密钥,例如uniqid(),并将其作为GET变量放入链接中。然后,下次用户加载页面时,您应该期望该密钥。例如,您可以将其保存在$_SESSION中,以确保服务器知道会发生什么。

答案 3 :(得分:0)

我认为这是一个糟糕的主意,因为它无助于您的网站速度。大多数浏览器在backforward

期间使用缓存的信息副本

其次,这意味着您需要生成uniqid并将其存储..您可以使用memcache

以下是我认为您的代码会是什么样的( 注意:不在生产中使用

<?php

/**
 * Make Sure the Broswer does to cache a copy
 */
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');

// Use Fast Storage
$memcache = new Memcache();
$memcache->addserver("127.0.0.1");

// Just a sample link to know what has been clicked
$link = isset($_GET['link']) ? $_GET['link'] : null;
$link = basename($link);

try {

    // uniqid per page
    $uid = isset($_GET['uid']) ? $_GET['uid'] : false;

    if (! $uid) {
        throw new Exception("Invalid Link");
    }
    if ($memcache->get($uid))
        throw new Exception("Refresh Detected");

        // Add the link as used
    $memcache->add($uid, 1, null, 600); // this would be deleted in 10 mins

    // Simple Return message
    $message = "Clicked:" . ucwords($link);
} catch ( Exception $e ) {

    // Simple Error Message
    $message = $e->getMessage();
    // do somthing usefull here
}

// New Ramdom uinqid
$uid = bin2hex(mcrypt_create_iv(50, MCRYPT_DEV_URANDOM));

?>

<html>

<head>
<title><?php echo $message ?></title>
<script type="text/javascript"
    src="http:////ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<script type="text/javascript">
$(function(){

    // Load all links
    $('a').each(function() {

        // Check with correspond to localhost .. since that what am using
        if(this.href.match("/localhost/"))
        {
            // Replace all links
            $(this).attr('href', 'http://localhost/lab/stackoverflow/a.php?uid=<?php echo $uid ;?>&link=' + this.href);
        }
    });
});
</script>
</head>

<body>
    <h3><?php echo $message ?></h3>
    <ul>
        <li><a href="index">Index</a></li>
        <li><a href="home">Home</a></li>
        <li><a href="about">About</a></li>
        <li><a href="http://google.com">Google</a></li>

    </ul>


</body>
</html>