2009-07-16 63 views
6

我有一個模板文件,其中包含我所有的頁眉,頁腳和常用信息。它包含當前頁面的適當內容(兩步查看模式)。PHP會話變量 - 消失並重新出現

我試圖建立使用PHP會話變量登錄系統。我可以設置變量,有時它們可​​以工作,但有時會消失。點擊鏈接有時會讓他們回來。

My site

登錄與

用戶名:測試 密碼:測試

還有的session_idvar_dumps$_SESSION在頂部。

點擊主頁。如果會話變量消失,請點擊回家(可能需要多達10次)以查看會話信息。點擊其他導航欄,有時候會話信息會一直存在,有時候不會。

這裏是我的模板文件的頂部會話代碼。

<?php 
session_start(); 

require './classes/DBInterface.php'; 
$db = new DBInterface(); 

if($_REQUEST['submit'] == 'Login') { 
    $username=$_POST['username']; 
    $password=$_POST['password']; 

    echo '-- login -- '.$username; 
    $rs = $db->verify($username,$password,"admin",0); 
    $admin = $rs->current(); 
    if ($rs->valid()) { 
     $_SESSION['username'] = $username; 
    } 
} 

echo ' -- session id -- '; 
var_dump(session_id()); 
echo ' -- session var -- '; 
var_dump($_SESSION); 

我正在使用PHP5。

回答

4

如果您正在使用startlogic(好像你?是)爲您的主機,你有沒有嘗試做他們在他們的常見問題說什麼:http://www.startlogic.com/knowledgebase/read_article.bml?kbid=600

他們表明這一點:

運行PHP的會議,包括在使用會話任何PHP 腳本的頂部210下面的代碼: session_save_path( 「你的home目錄 路徑」/ cgi-bin目錄是/ tmp);在session_start();

也許這會幫助嗎? 特別是如果他們使用某種負載平衡器,哪個平衡/ tmp,但不是您的主目錄?

+0

謝謝。我從來沒有想到它可能是一個託管的東西。現在我可以放回所有我試圖簡化我的問題的代碼。 – Emily 2009-07-16 19:47:07

2

如果您使用的是負載均衡設置,這可能是因爲只有N臺服務器的1具有正確的會話數據。

默認情況下,會話數據被存儲在文件系統中。
每次會話一個文件存儲在/ tmp /中,並以「sess」開頭,後跟session_id

1

您絕對肯定在此之前沒有任何東西被稱爲?我知道session_start()修改標題,除此之外,不知道爲什麼這不起作用。

來吧,打開錯誤的腳本的頂部報告中,在session_start()調用之前吧,看看如何幫助追蹤下來:

error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors',1); 
session_start()