2013-08-31 38 views
0

我一直在爲此敲打我的頭。我的代碼幾乎與其他項目完全相同。下面是我如何做到這一點:會話在頁面重定向後無法維護

session_start(); 
set_up_session($username); 
redirect_to('index.php'); 

而且,這兩個功能:

function redirect_to($location=null) { 
     if($location!=null) { 
     header("Location: {$location}"); 
     exit; 
     } 
    } 

    function set_up_session($username) { 
     session_start(); 
     $_SESSION['user_id']=$id; 
     $_SESSION['logged_in']=true; 
     $_SESSION['username']=$username; 
    } 

如果我註釋掉重定向和回聲任何$_SESSION VAR的中,VAR正確讀取。但重定向後,會話結束。

這就是下一頁。

<?php if (!isset($_SESSION['logged_in'])) { ?> 

// do stuff <-- this is what gets shown showing session is no longer active 

<?php } else { ?> 

<p>Hi, <?php echo $_SESSION['username']; ?></p> 


<?php } ?> 

回答

0

確保您重定向到的頁面有session_start()在文檔

if(!isset($_SESSION)){ 
    session_start(); 
} 
+0

這沒有錯,這是完全正常的。如果你想讓頁面識別一個會話,那麼你必須使該頁面成爲會話的一部分。我編輯了我的答案來阻止你的錯誤。 – Vector

+0

我修正了標題錯誤;但是如果我不想爲來賓用戶啓動會話呢? (或者它會不會損害任何東西?如果沒有設置var的話) – KickingLettuce

+0

如果沒有通過登錄系統給出會話變量等,來賓將不會成爲會話的一部分。 – Vector

0

我的第一步,我會做的是嘗試這下頁的頂部:

<?php 
    if (isset($_SESSION['logged_in'])) { 
     echo $_SESSION['username']; 
    } else { 
     //do stuff 
    } 
?> 

我之前在處理會話時發佈了一個問題。我對這個問題的解決方法是設置一個$ _SESSION [];到一個變量。 EX:

<?php 

    $Username = "Guest"; //Set your variable before you actually need it. (This is what fixed my problem) 
    if (isset($_SESSION['logged_in'])) { 
     $Username = $_SESSION['username']; 
    } 


?> 

注意:您可能需要更改的,如果(isset($ _ SESSION [ 'LOGGED_IN'])),而不是檢查如果用戶名設置。例如:

<?php 
    $User = "Guest"; 
    if (isset($_SESSION['username'])) { 
     $User = $_SESSION['username']; 
    } else { 
     //do stuff 
    } 

?> 

另外,作爲由其他用戶指出,要確保你的頁面重定向到具有在session_start();功能在它。否則,這不起作用。

+0

嗨,感謝您的提示;然而,即使在他們全部結束之後,我仍然無法正常工作...... – KickingLettuce

+0

在下一頁中,您有代碼檢查會話是否已設置,您是否有「session_start();」在你的<?php標籤之後?如果不是,那將是問題所在。 – jffy