2011-07-18 93 views
1

我已經構建了一個php/codeigniter應用,當我在vps上使用rackspace託管它時,它的工作完美無缺。我最近將它遷移到phpfog的託管環境,但是我遇到了用戶會話的問題。codeigniter會話在使用phpfog託管時會丟失會話狀態

我正在使用sessions類將數據存儲在數據庫中。我看到的問題是,在初始頁面請求中,會在數據庫中創建兩個會話記錄。然後爲每個頁面請求創建一個新的會話記錄。頁面間切換時,應用程序會丟失會話。

我不確定可能是什麼導致這個,也許是緩存層或phpfog的負載均衡器?有任何想法嗎?謝謝!

UPDATE:

玩這個存在了相當一段時間後,我可能已經能夠跟蹤這個bug降到@字體面包括在我的CSS文件中的一個?????? ??

/* 
@font-face { 
    font-family: 'ColaborateLightRegular'; 
    src: url('/application/assets/web/css/fonts/ColabLig-webfont.eot'); 
    src: url('/application/assets/web/css/fonts/ColabLig-webfont.eot?iefix') format('eot'), 
     url('/application/assets/web/css/fonts/ColabLig-webfont.woff') format('woff'), 
     url('/application/assets/web/css/fonts/ColabLig-webfont.ttf') format('truetype'), 
     url('/application/assets/web/css/fonts/ColabLig-webfont.svg#webfontR2xcGGVv') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 
*/ 

當代碼塊未在樣式表中註釋掉包括在我的很多網站的網頁,一個新的會話在我的數據庫中創建。當它被註釋掉時,新的會話不會發生?我明天會再看看它,因爲現在我正在睡覺,但這很奇怪。有誰知道可能是什麼原因造成的?

+0

你可以讀寫cookies嗎?沒有數據庫存儲會話會不會持續? –

+0

只要讀取/寫入cookies,我可以告訴我的服務器正在發送標題:「Set-Cookie \t ci_csrf_token = 2c673e4052dbad447ed82340c4c0878d; expires =星期二,2011年7月19日00:46:03 GMT;路徑= /」並且任何對$ this-> session-> userdata('field_i_previously_set')的調用都會失敗,因爲服務器似乎每次啓動一個會話 –

+0

我會給它一個沒有db存儲的鏡頭我只是真的希望避免去那條路線 –

回答

3

所以我最終確定了什麼導致額外的會話出現在我的數據庫中。我修改了codeigniter以使用控制器和視圖呈現自定義404頁面,並且此頁面正在導致生成新會話。本質上,我的瀏覽器會查找我的服務器上不存在的映像,並且由於瀏覽器請求的是映像/靜態資源,因此它沒有爲它傳遞cookie。 404控制器然後會啓動,因爲沒有通過cookie,它會認爲這是一個新的會話,併產生一個。非常棘手的錯誤追蹤。

+0

謝謝!我瘋了試圖修復pyrocms.com。出於某種原因,博客引起人們登錄。博客以某種方式包含store.css,而store.css正在尋找一個不存在的圖像。我的貪婪404重寫正在實現404頁面的加載,從而創建了一個新的PHP會話!這導致了幾個WTF,但最終很容易修復! :D –

+0

@菲爾鱘魚,我很高興我能幫助你。 :) –

+0

是的謝謝@CaseyFlynn。我也被這一個咬了。 – ws0x9