2010-02-04 122 views
1

我有一個非CMS頁面,其中會話值是使用PHP的默認會話處理程序存儲的。即:當自定義會話處理程序正在使用時,如何從PHP的默認會話中獲取值?

session_start(); 
$_SESSION['MyVar'] = true; 

在另一個頁面,這是CMS的一部分,我需要測試變量是否是真實的。但是,CMS使用它自己的會話處理程序,所以當我嘗試讀取變量時,它是未定義的,因爲它正在CMS的會話存儲系統中尋找它,而不是PHP的默認值。

我該如何切換一段時間並從默認會話存儲中讀取值,然後重新啓用CMS以使其正常工作?

喜歡的東西:

$SessionHandler = session_get_current_handler(); // save the CMS session handler 
session_use_default(); // Use PHP's default handler 
$Value = $_SESSION['MyVar']; // Get the value I need 
session_set_handler($SessionHandler); // Restore CMS handler 

回答

0

在某些時候,你需要調用session_start()以填充$_SESSION超全局數組。您可能能夠呼叫session_write_close(),更改處理程序,並再次執行session_start()

試試,它看起來像

$Sessionhandler = session_get_current_handler(); 
session_use_default(); 
session_start(); 
$value = $_SESSION['var']; 
session_write_close(); 
session_set_handler($Sessionhandler); 
session_start(); 

我幾乎懷疑這會工作,雖然。 「可能」工作的唯一原因是因爲session_write_close(),因爲如果您嘗試撥打session_start()兩次,PHP通常會拋出E_NOTICE

根據實施情況,它可能會嘗試再次獲取數據。但很多人在documentation comments已經看到奇怪的事情發生時撥打session_start()兩次,即使在session_write_close()