2013-01-22 22 views
1

確認用戶已登錄後,應該如何顯示只有成員才能看到的頁面?登錄用戶的內容應該只包含在源代碼中?

例如

<?php 
    start_session(); 
    if(isset($_SESSION[userLoggedIn])) 
     echo 'welcome to the members area!'; 
    else 
     echo 'You must log in first'; 
?> 

OR

<?php 
    start_session(); 
    if(!isset($_SESSION[userLoggedIn])) 
     goto notLoggedIn; 
?> 
    welcome to the members area! 
<?php 
    notLoggedIn: 
     echo 'You must log in first'; 
?> 

OR

我不喜歡裏面的PHP太多HTML。

當使用include/require解決方案時,我該如何使它成爲人們不能直接訪問html文件的方式?例如include members.html;什麼阻止用戶輸入網址~/members.html? ATM我使用WAMP,但我猜測服務器上有一個設置?

編輯:確定這是我的計劃是什麼:創建兩個目錄publicprivate,使根目錄public。我將有1個頁面檢查用戶是否已登錄,如果是,則使用$ _GET ['destination']中的值來包含private目錄中的正確頁面。任何我沒有想到的陷阱?

+3

如果您正處於處理複雜交互(如身份驗證及其無數安全/功能陷阱)的位置,並且您已開始看到將業務和表示邏輯分開的好處,或許您有時間開始評估一個好的PHP框架? http://phpframeworks.com/ –

回答

2

我不喜歡裏面的PHP太多HTML。

好。然後,你的HTML移到該處理表現邏輯HTML模板:

start_session(); 
if(isset($_SESSION['userLoggedIn'])){ 
    require 'public_html/logged_in.php'; 

}else{ 
    require 'public_html/public_area.php'; 
} 

更重要的是,創建一個加載這些模板,像函數:

function load_template($file, array $vars){ 
    extract($vars); 
    unset($file, $vars); 
    require func_get_arg(0); 
} 

當使用包括/需要的解決方案,我該如何做到這一點,所以人們不能直接訪問html文件?

幾個方法:

  • 在主腳本定義常量;檢查此常數在模板中定義,退出如果沒有
  • 或傳遞給你的模板變量做同樣的事情
  • 或把這些模板的網站根目錄外
  • 或的.htaccess規則
  • 保護他們

我假設這裏這些模板也是PHP腳本。但當然,你也可以使用PHP的頂部的某種模板系統,或創建自己的...

2

我會建議不要goto,在這種情況下確實沒有必要。使用includes是一個不錯的方法,如果您有多個頁面並且不想混合使用HTML和PHP。

如果你想要的一切將被包含在一個頁面上,你可以設置一個變量:

<?php 
    start_session(); 
    $logged_in = ($_SESSION['isLoggedIn'] == true); 
    // Whatever else you need... 
?> 

然後,後來的頁面(可能是在末尾)上,使用alternative syntax,你可以這樣做:

<?php if($logged_in): ?> 
    <p>Welcome to the member's area!</p> 
<?php else: ?> 
    <p>You must log in first!</p> 
<?php endif; ?> 
2

如果他/她沒有登錄,通過重定向訪問者保持您的PHP文件清潔:

if (empty($_SESSION['user_id']) 
{ 
    header('Location: /not_logged_in_page'); // Redirect to another page! 
    exit; 
} 

// Continue with the loggedin user page... 
相關問題