PHP防止两次包含相同的文件

时间:2013-10-17 07:20:43

标签: php session if-statement include isset

您好我有以下文件:
login.php,index.php,header.php,footer.php,restrictaccess.php

restrictaccess.php有以下代码:

<?php
session_start();
if (!(isset($_SESSION['user']) && $_SESSION['user'] != ''))
if (!(isset($_SESSION['access']) && $_SESSION['access'] != '')) 
{
header ("Location: login.php");
exit();
}


if($_SESSION['access']=="2" ) {
     echo 'You are logged on as Manager';

}
if($_SESSION['access']=="1" ) {
     echo 'You are logged on as Restricted user';
}
?>

restrictaccess.php,header.php和footer.php包含在每个页面上,接受login.php。
页眉和页脚都包含restrictaccess.php;这会引起什么问题吗?无论如何,这样的包含只会加载一次吗?

目前有人登录时显示“您作为管理员/受限制用户被挂起”的消息三次。

非常感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

尝试使用require_once()包含您的文件。此方法检查文件是否已包含在内。

PHP manual

答案 1 :(得分:1)

UGLY 方法

使用require_onceinclude_once进行restrictaccess.php

更好方法

将restrictaccess.php更改为:

<?php
if (!(isset($_SESSION['user']) && $_SESSION['user'] != ''))
if (!(isset($_SESSION['access']) && $_SESSION['access'] != '')) 
{
  header ("Location: login.php");
  exit();
}
?>

然后在每个客户端页面的顶部使用session_start()(用户可以浏览的页面,如index.php)。 仅在header.php中使用关于“您以...登录...”的代码(或者在有意义的地方显示。

<强>更新

您可以在文件中的任何位置包含上述restrictaccess.php 您必须确保在header ("Location: login.php");位之前没有数据发送到客户端(即如果您在echo之前有任何print_rvar_dumpheader ("Location: login.php"); ...然后PHP会生成错误)