2010-11-17 64 views
2

我使用Codeigniter 1.7.2和OBsession庫來處理會話並將它們存儲在數據庫中。我正在開發的應用程序由一個充當服務的域(帶有CI的域)組成(不知道這是否是正確的術語)。其他網站包括來自該網域的JavaScript文件,並從那裏對CI網域進行AJAX調用。如果該網站沒有會話ID,則CI域會返回從該呼叫創建的域,然後該站點上的JS會使用該會話ID設置一個cookie。從那時起,如果站點對CI域進行任何調用,它將包含該會話ID以識別自身。PHP爲每個頁面加載創建新會話

這適用於除Safari和所有Internet Explorer之外的其他所有瀏覽器(Mac和PC版本)。以Firefox爲例,我可以在客戶端cookie和數據庫中看到初始會話ID get set,我可以根據需要創建多個呼叫,並且可以刷新多個頁面,並且cookie和數據庫中的會話ID仍然相同。對於Safari,在每一次頁面刷新時,我都可以看到新會話被添加到我的會話表中。

關於這裏發生了什麼的任何想法?

+0

你知道CI的會話庫似乎涵蓋了OBsession中的所有內容嗎?可能值得你使用官方庫,可能會解決你的問題。 – fire 2010-11-17 16:16:46

+0

@fire我之前使用過官方庫,還是有同樣的問題。 – roflwaffle 2010-11-17 16:50:49

回答

0

很明顯,會話cookie不會在Safari中「粘住」。由於它是通過Javascript設置的,所以你必須圍繞Safari的調試器(無論哪裏/哪裏)捅一捅,看看有什麼在吹。也許安全模型不允許第三方javascript設置cookie,或者瀏覽器本身不允許第三方cookie。

+0

我一直在玩它一些,站點端的cookie(使用會話ID設置的cookie)似乎正在工作。我可以在第一頁加載的cookie中查看會話ID。在此之後的任何頁面加載中,會話ID正在從cookie中正確提取,並與AJAX呼叫一起發送(與第一次相同)。問題似乎是,「服務」域在每個AJAX調用中爲Safari創建另一個會話。 – roflwaffle 2010-11-17 16:58:09

0

搜索session_start()並粘貼角落找尋此功能的邏輯...

相關問題