我想创建一个页面,如果用户按下,转发或刷新页面,它应该显示无效页面,如果用户点击该页面上可用的链接,则应显示有效页面。
我不想禁用后退和前进按钮。 它应该在PHP中完成
提前感谢。
答案 0 :(得分:2)
我会使用JavaScript和unload event执行此操作。然后,当用户离开页面时,它的最后一个动作是清除DOM或存储一些cookie,让您测试该页面是后退按钮的结果还是返回页面的链接
答案 1 :(得分:1)
我能想到在PHP中完成此操作的唯一方法是将一次性令牌附加到页面上的每个链接,并在第一次使用时使它们到期。然而,这将需要将它们存储在某处,例如数据库或缓存。
会话也可以,每个页面加载都会生成一个唯一的ID。
答案 2 :(得分:0)
设置密钥,例如uniqid()
,并将其作为GET
变量放入链接中。然后,下次用户加载页面时,您应该期望该密钥。例如,您可以将其保存在$_SESSION
中,以确保服务器知道会发生什么。
答案 3 :(得分:0)
我认为这是一个糟糕的主意,因为它无助于您的网站速度。大多数浏览器在back
和forward
其次,这意味着您需要生成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>