我有一個非常奇怪的問題,希望有一個非常簡單的解釋,但經過幾個小時的調試後,我無法弄清楚發生了什麼。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/
更多的東西我想: ç
- Canged會話陣列中使用的密鑰,但沒有物。
- 在另一臺服務器上進行測試,使用相同的設置,也不會發生這種情況。
- 嘗試寫入會話數據後,我把網址在會話數組,但也不會解決任何問題。
- 使用strcmp(),strcasecmp()將變量$ _SERVER ['REQUEST_URI']與字符串'/ customer/2/customer_email /'進行比較,在Notepad ++中以十六進制形式查看,使用PHP自身顯示爲HEX在stackoverflow或php上找到函數。net
- 嘗試序列化URL之前把它放入$ _SESSION ['tab_menu'] ['customer_email'],但然後數字532142118只是神奇地添加到序列化的數據。
- 嘗試解碼數字532142118,但無法將其與任何東西相關聯。它兩週沒有變化。
- 重新啓動服務器
- 幾乎完全重寫了控制'選項卡'的邏輯,系統仍掛在該服務器變量上。
問題:
- 什麼改變會話數據?我怎樣才能進一步調試呢?
- 爲什麼它不會在所有的URL上發生?我使用這個系統幾個標籤幾年,這是這種奇怪的行爲第一次發生。
- 爲什麼在使用$ _SERVER變量時發生,而不是在將它添加爲自我類型化的字符串時?
- 這個數字是什麼意思? 532142118
希望對某些反應/輸入!
編輯: 加點7 & 8 「的事情,我試過」
'mysql> SELECT from_unixtime(532142118);'''1986-11-12 06:45:18'如果有幫助的話。 – Hussain
您的嘗試列表不包括重新啓動。 – palindrom
@HussainTamboli 是的,我看到了,我們認爲它與今天的日期有關,所以我將服務器的日期更改爲11月30日,但數字保持不變。而一個星期前,這個數字也是這樣,所以我認爲這與時間無關。 – Piemol