2013-12-11 48 views
1

我有一個非常奇怪的問題,希望有一個非常簡單的解釋,但經過幾個小時的調試後,我無法弄清楚發生了什麼。PHP爲會話變量添加「532142118」

LAMP堆棧使用PHP 5.4

下面是系統至極的簡化版本,仍然重現一些奇怪的行爲。

在一個簡單的自制框架中,我製作了一個水平菜單(製表符),當該標籤中的頁面用於搜索時,它會「記住」哪些網址處於活動狀態。因此,如果稍後再回到該選項卡,由於get參數,您可以立即看到最後的搜索結果。

所以一個 '標籤' 在菜單中,在此URL激活:

/customer/2/customer_email/ 

這個變量被放入一個會話變量: $ _SESSION [ 'tab_menu'] [ 'CUSTOMER_EMAIL'] = $ _ SERVER [ 'REQUEST_URI'];

刷新頁面或導航到另一個選項卡後,可以從會話中讀出選項卡的URL。但由於某些原因,存儲的URL被改變:

/customer/2/customer_email/532142118 

如果我把獲取URL後面的參數,相同的陌生號碼是...無論過程插入。 所以,如果我用這個網址訪問標籤:

/customer/2/customer_email/?foo=bar 

會議陣列看起來像這樣在同一頁面加載:

$_SESSION['tab_menu']['customer_email'] = /customer/2/customer_email/?foo=bar 

但是在我導航到另一個頁面,會話數據將閱讀:

$_SESSION['tab_menu']['customer_email'] = /customer/2/customer_email/532142118 

我驗證了$ _SESSION陣列看起來由沒關係的var_dump($ _ SESSION)在代碼中的最後一個點。 我驗證了$ _SESSION數據的下一次刷新是通過在代碼開頭的session_start()之後立即轉儲數據來更改的。

如果我這樣做,測試,陌生號碼未在會話數據補充:

$_SERVER['REQUEST_URI'] = '/customer/2/customer_email/'; 

如果我瀏覽到另一個另一個網址,會不會出現同樣的問題:

/customer/3/customer_email/ 

更多的東西我想: ç

  1. Canged會話陣列中使用的密鑰,但沒有物。
  2. 在另一臺服務器上進行測試,使用相同的設置,也不會發生這種情況。
  3. 嘗試寫入會話數據後,我把網址在會話數組,但也不會解決任何問題。
  4. 使用strcmp(),strcasecmp()將變量$ _SERVER ['REQUEST_URI']與字符串'/ customer/2/customer_email /'進行比較,在Notepad ++中以十六進制形式查看,使用PHP自身顯示爲HEX在stackoverflow或php上找到函數。net
  5. 嘗試序列化URL之前把它放入$ _SESSION ['tab_menu'] ['customer_email'],但然後數字532142118只是神奇地添加到序列化的數據。
  6. 嘗試解碼數字532142118,但無法將其與任何東西相關聯。它兩週沒有變化。
  7. 重新啓動服務器
  8. 幾乎完全重寫了控制'選項卡'的邏輯,系統仍掛在該服務器變量上。

問題:

  1. 什麼改變會話數據?我怎樣才能進一步調試呢?
  2. 爲什麼它不會在所有的URL上發生?我使用這個系統幾個標籤幾年,這是這種奇怪的行爲第一次發生。
  3. 爲什麼在使用$ _SERVER變量時發生,而不是在將它添加爲自我類型化的字符串時?
  4. 這個數字是什麼意思? 532142118

希望對某些反應/輸入!

編輯: 加點7 & 8 「的事情,我試過」

+0

'mysql> SELECT from_unixtime(532142118);'''1986-11-12 06:45:18'如果有幫助的話。 – Hussain

+0

您的嘗試列表不包括重新啓動。 – palindrom

+0

@HussainTamboli 是的,我看到了,我們認爲它與今天的日期有關,所以我將服務器的日期更改爲11月30日,但數字保持不變。而一個星期前,這個數字也是這樣,所以我認爲這與時間無關。 – Piemol

回答

0

FINALLY一個答案!

多虧了這個答案是我指出了正確的方向:
PHP session variable changes between pages

我做的網頁,並有問題的會議上,都出現了進口的電子郵件。 一些電子郵件被加載不存在的圖像,用的HTML源代碼:

<img border="0" width="110" height="114" id="_x0000_i1025" src="532142118" /> 

所以在背景上,這將加載與「532142118」後綴的網址, 完全集成的網絡統計數據,並且不會出現任何屏幕上可見的var_dumps。
我回到電子郵件自己的功能跟蹤在設置會話變量的位置,以結束該頁面多次請求。由於圖片來源的原因,額外請求的頁面會使會話和請求的URL變形。
現在我排除特定的url請求,不把url放在會話變量中,所以錯誤的img源碼不會影響系統:)

謝謝大家的意見!