2012-10-06 73 views
0

我一直在尋找在PHP 4服務器上運行的腳本中的問題(我知道......他們正在升級,但他們需要修復仍在PHP 4上的服務器)PHP會話變量正在重置

我在將會話變量重置爲下一頁開頭的其他值時遇到問題。這是我跑到這一點的測試,現在我不知道發生了什麼。

頁面結構: main.php - >首先調用start_page.inc。 main.php - >調用footer.inc最後。

下面是步驟正在發生什麼,我想不通:

start_page.inc: echos 'test2'(開始頁打印的$_SESSION['test']值)

default.php: echos 'test2'(如default.php打印出的$_SESSION['test']值)

default.php: SET 'test2'(如default.php設置的$_SESSION['test']test2的值)

footer.inc: SET 'test'(footer.inc套$_SESSION['test']test值)

footer.inc: echos 'test'(footer.inc打印出的$_SESSION['test']值)

不管多少次,我刷新頁面,它永遠是這樣只有一個例外。第一次設置會話變量時,它會在下次刷新時回顯test

任何人都明白爲什麼/如何發生這種情況以及我如何解決這個問題?我在PHP 5服務器上測試了這些文件,結果實際上相同。

前兩個回聲應該始終是test,除非我遺漏了一些東西。

我試過剝離下來到一個測試頁面沒有附加值,似乎無法重現它...測試變量不被覆蓋。我爲此測試專門創建了它。

+0

是否在每個頁面中使用footer.inc?無論哪一行代碼將會話值設置爲最後一行,都將轉到下一頁加載。 –

+0

我想你錯過了一些東西,對我來說至少是不可能發現那裏正在發生的事情,而沒有至少看到原始代碼的一部分......嘗試評論所有會話分配,並從非常第一個查看會話值何時以及實際在哪裏更改錯誤... – Mahdi

+0

掃描頁腳顯示一行「session_write_close()」。這似乎是導致此問題的問題。 – teynon

回答

1

我記得可能的問題是:你不使用session_start()或遠程端不支持或已停用cookie,如果第二個是你必須使用一個替代的方式來傳遞PHPSESSID的情況下(通常儘管$_GET) 。