我在Appfog上運行Yii-app。每當我嘗試超過1個實例時,都不再可能保持登錄狀態。多個實例隨機註銷用戶
我知道多個實例需要會話的共享存儲,並且我已經使用EDMSHttpSession實現了該實例。它在本地主機上工作,也就是我可以登錄,重新啓動Apache並保持登錄狀態。另外,如果我刪除數據庫中的會話記錄,則會退出。這讓我得出結論,PHP正在使用數據庫來存儲會話。
我不明白爲什麼我的共享存儲會話不適用於Appfog和我想就如何進行調試提出建議。
一些更多的背景信息:
- 我使用Cookie來實現自動登錄。他們應該有效30天(和 他們是根據Chrome檢查員),但從來沒有更多 然後幾個小時(瀏覽器會議我猜) - 不在本地,不在 Appfog。
- 隨着多個實例和自動登錄啓用(即我點擊「記住我」),我仍然被隨機踢出去,通常在2或3頁刷新後。據我瞭解,無論服務器會話如何,cookie都應自動在 中籤名。
- 在Appfog上,我有一個SSL端點,我不在本地主機上。
- 我已簽上Appfog我的共享會話存儲越來越新的會話(尋找數據庫中的表)
更新:
我做了一些測試,也許我的結果將使SENCE到有一個。
我清除所有Cookie並重新啓動我的Appfog應用程序。我登錄並檢查 「記住我」。現在以下響應的Set-Cookie標題有:
Set-Cookie:PHPSESSID=vrfoi0o15v3qps2644uqtvkfa1; path=/
Set-Cookie:PHPSESSID=db38s1k1vp5ngll837ac0vh0u7; path=/
Set-Cookie:73dfaf673b71b1f92d34b8ab63dab17b=812bbcfd4f5b3be91f8c85d39c3b37bb93e4c6b8a%3A4%3A%7Bi%3A0%3Bs%3A24%3A%225087ea0b3145a75545000000%22%3Bi%3A1%3Bs%3A22%3A%22demo%40playbackenergy.se%22%3Bi%3A2%3Bi%3A2592000%3Bi%3A3%3Ba%3A0%3A%7B%7D%7D; expires=Sun, 09-Jun-2013 08:32:24 GMT; path=/
在隨後的請求的請求Cookie的標頭是:
Cookie:PHPSESSID=db38s1k1vp5ngll837ac0vh0u7; 73dfaf673b71b1f92d34b8ab63dab17b=812bbcfd4f5b3be91f8c85d39c3b37bb93e4c6b8a%3A4%3A%7Bi%3A0%3Bs%3A24%3A%225087ea0b3145a75545000000%22%3Bi%3A1%3Bs%3A22%3A%22demo%40playbackenergy.se%22%3Bi%3A2%3Bi%3A2592000%3Bi%3A3%3Ba%3A0%3A%7B%7D%7D
我用"db38s1k1vp5ngll837ac0vh0u7"
找到我的數據庫會話。該行看起來是這樣的(注意vrfoi0o15v3qps2644uqtvkfa1
沒有在數據庫中找到):
{
"_id" : ObjectId("518cb0981045979e06000000"),
"data" : "73dfaf673b71b1f92d34b8ab63dab17b__id|s:24:\"5087ea0b3145a75545000000\";73dfaf673b71b1f92d34b8ab63dab17b__name|s:22:\"[email protected]\";73dfaf673b71b1f92d34b8ab63dab17b__states|a:0:{}73dfaf673b71b1f92d34b8ab63dab17brole|s:4:\"demo\";",
"expire" : 1368176186,
"id" : "db38s1k1vp5ngll837ac0vh0u7"
}
現在我再重新啓動我的Appfog的應用程序,並嘗試導航到另一個網頁在我的app.Now我就會退出。
重定向請求之前,Cookie的頭到登錄頁面是(同前):
Cookie:PHPSESSID=db38s1k1vp5ngll837ac0vh0u7; 73dfaf673b71b1f92d34b8ab63dab17b=812bbcfd4f5b3be91f8c85d39c3b37bb93e4c6b8a%3A4%3A%7Bi%3A0%3Bs%3A24%3A%225087ea0b3145a75545000000%22%3Bi%3A1%3Bs%3A22%3A%22demo%40playbackenergy.se%22%3Bi%3A2%3Bi%3A2592000%3Bi%3A3%3Ba%3A0%3A%7B%7D%7D
謝謝!我做了一些檢查數據庫中的cookie和會話會發生什麼,並更新了問題。在Cookie標頭中是否有任何您覺得奇怪的事情? – luttkens 2013-05-10 08:56:01
嗯。查看更新。看來會議不會丟失。你可以在你的數據庫中進行驗證。 – 2013-05-10 11:00:15
明白了!首先,我意識到,作爲訪客用戶,會話ID在每次頁面加載時都被更改。我查看了標題,發現我的所有頁面都有'Pragma:no-cache'和'Cache-Control:no-cache,no-store,must-revalidate'。當刪除'no-store'時,會話ID保持不變,現在多個實例可以工作(幾乎現在我遇到了Yii的assets文件夾,每個實例都有不同的問題,並打破了JavaScript引用,但CDN應該解決這個問題)。 – luttkens 2013-05-13 06:23:20