我有index.php,其中包含
等页面<?php
define('MyConst', TRUE);
include_once('template/header.php');
if (!empty($_GET['action'])) {
$action = $_GET['action'];
$action = basename($action);
include("template/$action.php");
} else {
include("template/main.php");
}
include_once('template/footer.php');
?>
在模板目录中,我有main.php,它有链接到其他页面,如page1.php,page2.php。
<a href="?action=page1">Goto page 1</a>
<a href="?action=page2">Goto page 2</a>
如何阻止用户直接在网址上输入“http://mydomain.com/?action=page1”来访问网页?如果他们已经完成了,那么将它们重定向到main.php?
答案 0 :(得分:1)
你做不到。你想要的是根本不可能的。
对于服务器端,无法知道是否键入或单击了URL。
答案 1 :(得分:1)
如果我理解正确,您想要的是阻止用户访问http://example.org/?action=page1
,除非他们来自http://example.org/?action=main
。为此,您必须能够检测它们是否来自http://example.org/?action=main
。最安全的方法是生成一些随机值,这些值在用户访问http://example.org/?action=main
时与用户关联,并检查用户何时访问http://example.org/?action=page1
时是否存在正确的值。如果没有,他们会尝试直接访问该页面。
答案 2 :(得分:0)
检查HTTP_REFERER,如果它没有指向正确的值(如你的页面),那么重定向用户。
答案 3 :(得分:0)
也许你可以试试这个,在你的index.php上:
session_start();
if(! isset($_GET['action']))
{
$_SESSION['pageAccess'] = true; # Set the key whatever you want
}
然后在该脚本下(我们需要使用两次session_start()):
if(isset($_GET['action']))
{
if(! isset($_SESSION['pageAccess']) || ! $_SESSION['pageAccess'])
exit('There is no direct access allowed.');
}
希望得到这个帮助,祝你有个美好的一天。
答案 4 :(得分:0)
根据你的问题:
您可以遵循两种方法:
HTTP_REFFRER
并检查所需的页面。如果他正在访问直接URL,则显示错误页面。$_SESSION
但这种方法可能有害,因为SESSION
将一直存在,直到浏览器/实例关闭。第一种方法更好。 而且根据Pehaa,您无法检查id URL是否已键入