2009-10-03 72 views
0

因爲我的另一個問題有點含糊所以...設置會話的幫助

這就是這種情況。

我有一個xml提要,它會在每個頁面刷新時生成一個隨機的24個字符的字符串。

所以,當用戶訪問我的網站和土地稱爲頁上的「如何對做件藍色widgets.php」 - 他們唯一的字符串作爲38jsue710ppahchd67ywha94例如產生。

現在,當這個用戶點擊另一個頁面上,可以說,「怎麼對做紅色-widgets.php」 - 飼料創造了一個全新的字符串:836aeq88udh761aso09kjs21

我想要做的是在訪問的每一頁上存儲用戶訪問期間Feed的第一個值。

我使用的會話,這裏是我的代碼:

// Start Session 
    session_start(); 

    ... 

    // Don't worry about this bit - $sessionId is the random string 
    if($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) 
    { 
     $result = $xmlobj->xpath("TrafficMeta"); 
     $sessionId = $result[0]->sessionId; 
    } 


    // Main Part 
    if(isset($_SESSION['sessionString'])): // if 'random' session is set 
     $string = $_SESSION['sessionString']; 
    else: 
     $string = $sessionId; 
     $_SESSION['sessionString'] = $string; 
    endif; 

    echo $_SESSION['sessionString']; 

它當我第一次訪問該網站工作正常,腳本吐出會話串,但是當我刷新,它什麼也不輸出。

任何想法?

+1

在使用'$ _SESSION'之前是否調用'session_start'? – Gumbo 2009-10-03 17:11:54

+0

是的,在此之前還有更多的代碼 – 2009-10-03 17:13:59

+0

並且session_start()正在工作,即沒有內容在session_start()之前發送到客戶端?你用error_reporting = E_ALL測試你的腳本,也許display_errors = On? – VolkerK 2009-10-03 17:37:03

回答

4

嘗試

$sessionId = (string)$result[0]->sessionId; 

一個全新的會話。

當您使用simplexml_load_string()libxml(在場景後面驅動php-dom和php-simplexml的庫)讀取xml文檔時,將在內存中創建文檔的dom表示形式。 「屬於」xml文檔的所有SimpleXMLElement對象都引用相同的表示形式。如果沒有這個表達式,SimpleXMLElements或多或少都毫無價值。
如果沒有顯式轉換爲字符串,則在_SESSION中存儲一個SimplXMLElement。在php實例的結尾處或者調用session_write_close()時,_SESSION被序列化並與之一起使用SimpleXMLElement。但是,SimpleXMLElements不會在它們被序列化時保留它們所屬的libxml dom表示。然後,當他們去系列化他們又沒有引用有效的DOM了和PHP提出警告

Warning: unserialize(): Node no longer exists in .... 

既然你不感興趣的SimpleXMLElement,但它的文本內容,只需將它轉換爲(串),而dom表示法(仍然)是有效的。你會得到內容作爲一個「正常」的字符串,可以(當然)被序列化。

2

試試這個:

if (!isset($_SESSION['sessionString'])) { 
    if ($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) { 
     $result = $xmlobj->xpath("TrafficMeta"); 
     $_SESSION['sessionString'] = $result[0]->sessionId; 
    } else { 
     // Error: no session ID available 
    } 
} 

echo $_SESSION['sessionString']; 
+0

@Keith Donegan:你如何攜帶會話ID?通過cookie或URL? – Gumbo 2009-10-03 17:40:16

+0

目前,我只是想正確地得到字符串(哪個VolkerK幫助過我) - 現在我將繼續討論這個:) – 2009-10-03 17:44:22