2013-01-14 194 views
0

我有兩頁:index.phpregister.php。 如果用戶是guest,他可以點擊register.php - >進入該頁面 - >註冊表單並登錄。登錄後,他被重定向到index.php。現在,如果他/她嘗試訪問signup.php - >它們會自動重定向到index.php。 我使用:用戶登錄後自動重定向

<?php 
    if(!isset($_SESSION['id'])) 
    { 
     //show the form 
     .... 
    } 
    else 
    { 
     header("Location: index.php"); 
     exit; 
    } 
    ?> 

如何過,我得到一個Cannot modify header information錯誤。 當index.phpregister.php是兩個單獨的頁面時,還可以如何讓代碼重定向。

+3

確保你的重定向是你做的第一件事。您是否在重定向用戶之前輸出任何內容? – JSantos

+0

@JSantos:它包含HTML元素。 – xan

+1

你必須刪除它們。重定向之前沒有輸出 – JSantos

回答

0

我所做的是創建一個名爲check_logged.php的單獨文件,該文件包含在您希望阻止的頁面頂部。它所做的是檢查是否 添加到您的網頁

session_start(); 
include('php/check_logged.php'); 

Check_logged.php的頂部包含這樣的:

if (!empty($_SESSION['id'])) { 
    header('Location: index.php'); 
    exit; 
} 

我個人需要進行第二次檢查,因爲你之後我的形式輸出的確認消息成功地與該還原您的密碼:

if(!isset($_SESSION['good_message'])){ //check if a confirmation message is set, if no continue to check if the user is logged in. 
    if (!empty($_SESSION['id'])) { 
     header('Location: index.php'); 
     exit; 
    } 
} 

這樣,如果你返回到登錄頁面,並要顯示它爲d的確認消息不會立即重定向您。我傾向於顯示我的消息,如下所示:

<span class="error"> <?php 
    if(IsSet($_SESSION[ "message_sent" ])) { 
      echo "<p align='center' style='color: #8BA870;';> " . $_SESSION[ "message_sent" ] . "</p>"; 
      unset($_SESSION[ "message_sent" ]); 
}?></span> 

它顯示一次之後它將自行解除。因此,如果刷新頁面,則數值會變長並設爲'set',您將被重定向到主頁。