是否可以禁止直接访问PHP文件并仅在从其他PHP文件重定向时才允许访问?
例如,只有在loading.php
页面重定向时,才允许访问example.php
。我怎么能这样做?
我希望你理解我的意思。如果没有,请问我,我会尝试更好地解释。
答案 0 :(得分:2)
使用example.php
session_start();
$_SESSION['loading']='yes';
loading.php
session_start();
if($_SESSION['loading']=='yes'){
/all good
}else{
//bad, redirect back or whatever
}
$_SESSION['loading']=''; // clear session var
答案 1 :(得分:0)
您可以查看引用,但不安全:
<强> loading.php 强>
<?php
if($_SERVER['HTTP_REFERER']!=='http://yoursite/example.php')
die('Denied');
-
或者您可以在会话中设置访问标记
<强>使用example.php 强>
<?php
$_SESSION['isVisitedExample'] = true;
<强> loading.php 强>
<?php
if(!isset($_SESSION['isVisitedExample']))
die('Denied');
-
或在cookie中(不安全)
<强>使用example.php 强>
<?php
setcookie('isVisitedExample', 1);
<强> loading.php 强>
<?php
if(!isset($_COOKIE['isVisitedExample']))
die('Denied');
-
或混合使用此方法
答案 2 :(得分:0)
测试变量$_SERVER['HTTP_REFERER']
。 (是的,拼写错误是必须使用的。)该变量包含用户来自的网站的URL。 REFERER
标题为空白或&#39; - &#39;如果直接访问该页面。
此代码如下所示:
if (empty($_SERVER['HTTP_REFERER']) or $_SERVER['HTTP_REFERER'] == '-') {
exit; // do nothing if hit directly.
}
// The real page logic goes here.
如果您只想允许来自特定网址的加载页面,那么您可以测试该网址,而不是测试empty()
。
请注意,REFERER
标题是由浏览器发送的,并且很容易被欺骗。也就是说,检查referer标头对于阻止其他网站直接从您的网站加载图片非常有用。
另一种选择是使用会话和会话变量来检查有人在加载页面之前点击了适当的页面。