浏览器&x27;是否在PHP中执行后退、前进、刷新(F5或ctrl+;R)检查?
我想做一个页面,如果用户按下后退,前进或刷新页面,它应该说无效页面,如果用户点击该页面上可用的链接,它应该说有效页面 我不想禁用后退和前进按钮。 它应该在PHP中完成浏览器&x27;是否在PHP中执行后退、前进、刷新(F5或ctrl+;R)检查?,php,Php,我想做一个页面,如果用户按下后退,前进或刷新页面,它应该说无效页面,如果用户点击该页面上可用的链接,它应该说有效页面 我不想禁用后退和前进按钮。 它应该在PHP中完成 提前感谢。设置一个键,例如uniqid(),并将其作为链接中的GET变量。然后,下次用户加载页面时,您应该期望该键。例如,您可以将其保存在$\u会话中,以确保服务器知道将发生什么。在PHP中实现这一点的唯一方法是向页面上的每个链接添加一个一次性令牌,并在第一次使用时使其过期。然而,这需要将它们存储在某个地方,例如数据库或缓存 会话
提前感谢。设置一个键,例如
uniqid()
,并将其作为链接中的GET
变量。然后,下次用户加载页面时,您应该期望该键。例如,您可以将其保存在$\u会话中,以确保服务器知道将发生什么。在PHP中实现这一点的唯一方法是向页面上的每个链接添加一个一次性令牌,并在第一次使用时使其过期。然而,这需要将它们存储在某个地方,例如数据库或缓存
会话也可以工作,为每个页面加载生成一个唯一的ID。我会使用JavaScript和。然后,当用户导航离开页面时,它的最后一个动作是清除DOM或存储一些cookie,这些cookie将让您测试页面是否是返回按钮或返回页面的链接的结果,我真的认为这是一个坏主意,因为这无助于您的网站速度。大多数浏览器在后退
和前进
其次,这意味着您需要生成uniqid并存储它。。您可以使用memcache
以下是我认为您的代码应该是什么样子的(注意:不要在生产中使用)
$(函数(){
//加载所有链接
$('a')。每个(函数(){
//检查对应于localhost..因为我使用的是
if(this.href.match(“/localhost/”)
{
//更换所有链接
$(this.attr('href','http://localhost/lab/stackoverflow/a.php?uid=&link='+this.href);
}
});
});
如果我理解正确,这不是关于测试是否按下了后退/前进等键,而是关于确保某个页面的一次性。Janis感谢您的回答,但是当有人按下F5时会怎么样?如果您保存标识符,它还应该负责刷新,因为您已经使用了令牌。对于一个代码示例,您可以将其视为答案,它看起来不错。虽然我同意,但在生产中使用它会导致性能下降。我想在生产中使用它。我们可以使用当前时间戳作为唯一id,并可以检查以前的请求。
<?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>