所以我有一個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()
函數時更改以前的會話值(針對之前設置的會話變量)。我檢查了更新日誌並沒有看到任何更新。
這可能是一個錯誤?
您是否比較了兩種環境的ini文件?有什麼區別? – erickthered
我可以在任一環境中生成phpinfo(),但我無法直接訪問INI文件。我是否應該尋找可能導致此問題的特別事情?那裏有很多信息... – 0pt1m1z3
是啊!它可以是相當的壓倒性的,並沒有神奇的答案。有很多事情可以檢查,比如'Register Globals'(自PHP 5.3以來已過時),或者可能是session。*設置。您還可以添加var_dump()和echo()來跟蹤腳本的流程,或者可以設置error_reporting(E_ALL)以確保沒有任何錯誤。另外,請確保您的腳本不依賴於以下任何內容:http://www.php.net/manual/en/migration53.deprecated.php – erickthered