2014-10-19 57 views
0

是否有可能禁止直接访问PHP文件,并且只有在从其他PHP文件重定向时才允许访问?只有在重定向时才允许访问php文件

例如,仅当从example.php页面重定向时才应允许访问loading.php。我怎么能这样做?

我希望你明白我的意思。如果没有,请问我,我会尽力解释更好。

+0

http是无状态的,但会话通常用于此 – 2014-10-19 20:19:13

回答

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'); 

设置已访问标记 -

或饼干(不安全)

使用example.php

<?php 
    setcookie('isVisitedExample', 1); 

loading.php

<?php 
    if(!isset($_COOKIE['isVisitedExample'])) 
    die('Denied'); 

-

或混合使用这方法

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 
+0

谢谢,它的工作原理! 顺便说一句,你忘了添加)到你的if语句。 – 2014-10-22 15:12:04

0

测试变量$_SERVER['HTTP_REFERER']。 (是的,不正确的拼写是必须使用的。)该变量包含用户来自的网站的URL。如果直接访问页面,则REFERER标题为空或“ - ”。

这种情况的代码看起来像下面这样:

if (empty($_SERVER['HTTP_REFERER']) or $_SERVER['HTTP_REFERER'] == '-') { 
    exit; // do nothing if hit directly. 
} 
// The real page logic goes here. 

如果你想只允许加载页面从一个特定的网址,您就可以测试该网址,而不是测试empty()

请注意,REFERER标头是由浏览器发送的,容易被欺骗。也就是说,检查引用标头对于阻止其他网站直接从您的网站加载图像非常有用。

另一种选择是使用会话和会话变量来检查某人是否在加载器页面前点击相应的页面。

+0

从不使用'$ _SERVER ['REFERER']'它的浏览器集合 – 2014-10-19 20:27:00

+0

它实际上是HTTP_REFERER,而不是REFERER。 – Ali 2014-10-19 20:34:27

+0

谢谢,修正了这个问题。 – edgester 2014-10-19 20:41:13

相关问题