2013-10-17 88 views
0

您好我有以下文件:
login.php中,index.php文件的header.php,footer.php,restrictaccess.phpPHP防止包括同一個文件兩次

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'; 
} 
?> 

restricttaccess.php,header.php和footer.php包含在每個頁面接受login.php。
頁眉和頁腳都包含restricttaccess.php;這會造成什麼問題?無論如何,這樣的包括只會被加載一次?

當前有人登錄消息「您作爲經理/受限用戶被鎖定」顯示三次。

您的幫助將不勝感激,謝謝。

+0

使用['include_once'](http:// php。 net/manual/en/function.include-once.php) – billyonecan

+0

嘗試使用'include_once' – Ruddy

回答

1

嘗試使用require_once()來包含您的文件。該方法檢查文件是否已包含在內。

PHP manual

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(); 
} 
?> 

然後在每個客戶端頁面的頂部(用戶可以瀏覽的頁面,如index.php)使用session_start()。 使用有關代碼「你是登錄爲...」只在header.php中(或者是任何一個有意義的顯示。

UPDATE

可以包括上述restrictaccess.php在你的任何地方文件但是你必須確保在header ("Location: login.php");位之前沒有數據發送到客戶端(即,如果你有任何echo,print_rvar_dump ...在header ("Location: login.php");之前,那麼PHP將產生錯誤)

+0

以及session_start();我是否也在所有頁面上添加了restrictedtaccess.php? – bickyz

+0

幾乎(請參閱我上面的編輯),你可以將它添加到任何你想保證授權訪問的頁面。如果按照我的示例保留它,則包含多個時間是安全的,因爲沒有聲明函數/類,唯一的結果是重定向。 – JScoobyCed