定义和定义禁止直接访问

时间:2010-07-19 10:19:01

标签: php

我有两个页面:rooms.php和reservation.php 用户只能通过rooms.php访问reservation.php 我使用了define('NOT',1);if (!defined('NOT')) exit('no direct!'); 但是当用户从rooms.php转到reservation.php时会出现错误消息? 为什么定义功能不起作用?提前致谢

4 个答案:

答案 0 :(得分:2)

您可能会在此处产生误解:此方法仅在使用include()或require()rooms.php 包含 reservation.php时才有效。它不适用于参考者。

这是你在做什么的?在这种情况下,您的代码看起来正确。 rooms.php需要包含

define('NOT', 1);

之前包含reservation.php的行;但这应该有用。

答案 1 :(得分:1)

假设您先拨打rooms.php并通过链接转到reservation.php

访问其他页面后,常量将丢失。您应该将值存储在session

session_start();
$_SESSION['NOT'] = 1;

PHP文件是每次调用时都会执行的脚本。但这也意味着脚本执行后所有变量,常量都丢失。但会话是通过多个页面调用来保存数据。

答案 2 :(得分:0)

在您的rooms.php中

在包含reservation.php之前添加以下代码

define('FROM_ROOM',true);

在最顶层的Reservation.php内添加

if(!defined('FROM_ROOM')){ exit("Please go away");}

所以看起来像这样

rooms.php:     定义( 'FROM_ROOM',TRUE);     包括'reservation.php';

reservation.php:

if(!defined('FROM_ROOM')){ exit("Please go away");}
echo "Im reservation.php, i only can be include by rooms.php";

答案 3 :(得分:0)

您不需要常量,您需要会话变量或检查HTTP引用者;常量只有在包含 reservation.php时才有效,而你不是,你只是规定用户在看到reservation.php之前应该看过rooms.php