我试图让page1.php在5秒后重定向到page2.php。但是,page2.php必须是受限制的页面,只有在您从 - >发送时才能查看该页面。如果您在地址栏中手动输入地址,则无法访问mydomain.com/page1.php。
我尝试过使用共享密钥的方法,htaccess和php HTTP_REFERRER。
我认为问题来自重定向,我相信这是因为重定向脚本没有发送HTTP_REFERRER,因此page2.php正在查看从重定向脚本发送的手动输入的URL。我试过一个简单的PHP重定向和JavaScript。以下是我使用过的两个不同的重定向脚本。
php版。
header( "refresh:5;url=page2.php" );
Javascript版本。
<script type="text/javascript">
function Redirect()
{
window.location="page2.php";
}
setTimeout('Redirect()', 5000);
</script>
我已尝试使用完整网址和/或不使用http://,例如mydomain.com/page2.php。
Page2.php只需要接受来自page1.php的流量。我不反对如何实现这一目标。只要用户无法手动输入地址并访问该页面,就可以使用共享密钥或任何其他方面。我也完全清楚,推荐人可能会被欺骗,但我没有专业知识可以提升。
答案 0 :(得分:6)
您可以使用会话数据来确保第2页的用户已通过第1页
通过会话的工作方式,encrypted string
非常安全,即使它根本没有加密。
:
session_start();
$_SESSION['secret_key'] = 'encrypted_string';
第2页:
session_start();
if($_SESSION['secret_key'] == 'encrypted_string'){
// user is authorized
echo 'You are authorized to see this page';
}
else{
echo 'Please visit page1 before accessing this page';
}
// Logic for authorized user
或者,第2页的更短版本:
if(empty($_SESSION['secret_key']) || $_SESSION['secret_key'] != 'encrypted_string'){
die('You are not authorized to view this page.');
}
echo 'only authorized user will see from here forward';
顺便说一下,在测试时,请记住,一旦设置了会话,您将不得不在浏览器中删除会话,或者使用隐身模式再次进行测试。
要删除Chrome ctrl+shift+delete
上的缓存并选择Cookie和其他
答案 1 :(得分:2)
以下是我将如何使用3页进行操作。
在着陆页上,包含您的JavaScript,这会将您重定向到设置会话变量的中间页面,然后重定向到最终页面。
在最后一页上,检查会话变量,确定是否显示页面,然后取消设置会话变量(因此,如果他们再次尝试而不返回第一页,它将不再起作用)。
p1.php
<?php session_start(); ?>
<script type="text/javascript">
function Redirect()
{
window.location="p12.php";
}
setTimeout('Redirect()', 5000);
</script>
p12.php
<?php session_start();
$_SESSION['secret'] = 'todays_password';
$newURL = 'p2.php';
header('Location: '.$newURL);
?>
<script type="text/javascript">
function Redirect()
{
window.location="p2.php";
}
Redirect();
</script>
p2.php
<?php session_start();
if (isset($_SESSION['secret']))
{
if ($_SESSION['secret'] == 'todays_password')
{
//The user provided the correct secret session variable
echo 'welcome. you can view this page.';
//Put all of your page content here
?>
<!-- HTML content should be in between php delimiters, like this-->
<?php
}
else
{
//The user supplied a secret code, but it was not the correct one
echo 'invalid secret.';
//You can also add code for redirecting the user back to p1 here
//Or just display an error message
}
}
else
{
//The user did not provide a secret session variable -- they most likely did not pass through p12.
echo 'error, you are unable to view this page';
//You can also add code for redirecting the user back to p1 here
//Or just display an error message
}
unset($_SESSION['secret']); //This line makes the user return to p1 every time they visit p2 -- delete this line if you only want them to visit p1 once.
?>
要使此方法安全,您需要为每个用户提供其秘密会话变量的唯一值。当用户访问p1作为客户端和服务器端数据库的会话变量时,存储此变量及其时间戳。加载p2时,检查它们提供的会话值在数据库中是否至少为5秒。如果是,让他们看看页面。然后删除数据库中的值。