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