2013-02-05 63 views
1

所以我有一個PHP函數,設置會話變量,如下所示:奇怪的PHP會話問題

function createSVar($varext) { 
[...] 
$_SESSION['v'.$varext) = time(); // hypothetical value set 
[...] 
return $output; 
} 

並調用它的功能:

function someFunction1() { 
[...] 
$output = createSVar("name1"); 
[...] 
return $output; 
} 

function someFunction2() { 
[...] 
$output = createSVar("name2"); 
[...] 
return $output; 
} 

這些功能包含在一個函數文件。然後,我有一個配置文件設置如下:

<? 
ob_start(); 
session_name("mysession"); 
session_start(); 
[...] 
include("functions.php"); 

然後在我的PHP頁面,這些被用作如下:

<? 
include("config.php"); 
[...] 
echo someFunction2(); 
[...] 
echo someFunction1(); 

我的問題是,這種設置工作正常,在兩個不同的機器上使用PHP 5.2 0.17。在PHP 5.3.0的第三個版本中,它沒有。由於某種原因,它會在每次調用createSVar()函數時更改以前的會話值(針對之前設置的會話變量)。我檢查了更新日誌並沒有看到任何更新。

這可能是一個錯誤?

+0

您是否比較了兩種環境的ini文件?有什麼區別? – erickthered

+0

我可以在任一環境中生成phpinfo(),但我無法直接訪問INI文件。我是否應該尋找可能導致此問題的特別事情?那裏有很多信息... – 0pt1m1z3

+1

是啊!它可以是相當的壓倒性的,並沒有神奇的答案。有很多事情可以檢查,比如'Register Globals'(自PHP 5.3以來已過時),或者可能是session。*設置。您還可以添加var_dump()和echo()來跟蹤腳本的流程,或者可以設置error_reporting(E_ALL)以確保沒有任何錯誤。另外,請確保您的腳本不依賴於以下任何內容:http://www.php.net/manual/en/migration53.deprecated.php – erickthered

回答

0

我的第一個傾向是在session_start()之後調用ob_start()。 Session_start()需要發送可能被ob_start()調用緩衝的HTTP頭。

+0

沒有。這種變化沒有運氣。就像我說的那樣,它可以在5.2.17的兩個不同的託管服務提供商上正常工作 – 0pt1m1z3

+0

這是一個比答案更多的評論。通常從技術上講,輸出緩衝不應該與'session_start()'以任何方式衝突。 – hakre