2012-10-26 72 views
0

我遇到了PHP和會話很怪異的行爲。奇怪的會話行爲 - 會話消失

我正在使用的腳本已經工作了好幾個月,它正在各種PHP版本的各種服務器上工作。

該腳本根據URL讀取URL並重新路由,例如擊中/offer/abc1234.html它將調用類提議並將abc1234作爲參數。

我已經創建了一個「故障轉移」類,換句話說,如果您編寫/abc1234.html它將測試各種數據庫條目,並且如果它發現一個自動包含該類,就好像它被URL調用了一點點額外的開銷,所不同的是:

  • /offer/abc1234.html :: index.php文件 - > offer.php - > home.php
  • abc1234.html :: index.php文件 - > error.php - > failover.php - > offer.php - > home.php

現在,鑑於這一切工作,並有b工作幾個月我的問題是與會議。

如果我打/offer/abc1234.html我看到會話集和發送到瀏覽器

如果我打/abc1234.html會話設置正確的餅乾,沒有任何錯誤(E_STRICT + E_ALL)沒有警告,沒有任何東西,但cookie不會被髮送到瀏覽器。我甚至試圖在腳本的末尾打印$ _SESSION,並且會話被填充,除了標題之外,所有的變量都是正確的。

我試圖調試,並在不同的地方添加各種的var_dump,但沒有什麼不同,除了隨時隨地的header_list()永遠不會包含會話cookie的,但它確實包含了手動設置其他Cookie:

我現在打印:

  • 會話名稱()
  • SESSION_ID() - 這種改變在每次刷新,但它是一致的整個頁面上
  • session_get_cookie_params()
  • headers_list() - 這並不包含set-cookie頭是在session_start應該有

輸出是一樣的東西:

  • 字符串(6) 「QSCSID」
  • 串(26 )「」456disv3pl4u2j81dej6h6d717「
  • array(5){[」lifetime「] => int(0)[」path「] => string(1)」/「[」domain「] => string(0)」「 [「secure」] => bool(false)[「httponly」] => bool(false)}
  • array(4){[0] => strin g(38)「Expires:Thu,19 Nov 1981 08:52:00 GMT」[1] => string(77)「Cache-Control:no-store,no-cache,must-revalidate,post-check = 0 ,pre-check = 0「[2] => string(16)」Pragma:no-cache「[3] => string(68)」Set-Cookie:spi = 17468;到期=週六,2013年10月26日05:02:23 GMT;路徑= /「}

再次,我越來越瘋狂,因爲一切工作在一天早些時候,然後我重新啓動apache,它停止工作。

我檢查了服務器,文件夾是不完整的,它是可寫和文件得到創建是空的,當我打電話abcd1234.html

編輯
它工作時,我開始直接在服務器上通過「ee」(FreeBSD編輯器)打開文件。直到我打開/保存課程,沒有對文件進行任何更改,我不小心添加了一個空格並將其刪除,然後當我退出編輯時要求保存並且我說YES。

PHP是用eaccelerator編譯的,我已經刪除了緩存文件夾以及重新啓動apache,並看到文件夾autopopulate。這樣的類(failover.php)是一個簡單的4函數,其中每個函數都是查詢,然後構造函數每次調用一個函數。

因此,它似乎工作,但我想知道如果任何人經歷過這樣的事情,如果他們知道這個問題可能已經

回答

0

我一直沒能複製它,一旦我開該文件並在FreeBSD上以「ee」關閉一切正常。