2013-02-28 79 views
1

現狀:的Safari 6的Ajax請求得到新的會話ID

我有一個Javascript/jQuery的web應用程序,其與PHP/MySQL的/ Zend Framework的1.12後端通信。 Web應用程序在iFrame內運行(在iframe模式下使用jQuery fancybox加載)。

應用程序在後端創建一個對象並保存當前的會話ID。然後,當用戶與應用程序交互時,它會在前端顯示對象的屬性,並通過ajax調用修改後端對象。會話ID用於檢查ajax請求是否來自同一用戶(用戶未登錄,因此它是唯一的檢查方式)。

我使用jQuery來執行ajax調用,並使用Zend_Session在PHP/Zend中使用會話。

問題:現在

,問題是,在Safari 6中,這些Ajax請求有不同的會話ID,以便它們不匹配存儲在後端模型對象的會話ID和訪問被拒絕。

這在iframe中運行時,沒有任何其他的瀏覽器,而不是在Safari瀏覽器的其他版本(5以下)

有沒有人有一個想法是什麼原因,以及如何對付它只是發生?

一些更多的信息:在iframe

整個應用程序運行時,從該會話ID存儲在後端模式以及呼叫。所以我認爲所有這些電話都有相同的會話ID。另一件事:一旦我在單獨的選項卡中運行應用程序,然後再次在iframe中,問題就會消失:從那時起,直到我終止瀏覽器會話,我每次都會獲得相同的會話ID,正如我所期望的那樣。坦率地說,這聽起來像是一個錯誤。

+0

我在6年的Safari擴展中也遇到了這個問題。還沒有設法繞過它。 – Alfo 2013-02-28 17:49:34

+0

似乎是Safari中的一個錯誤,我認爲,如果是這種情況,可能不太可能解決這個問題...... – Asciiom 2013-02-28 17:57:55

回答

1

關鍵問題是iFrame。作爲Safari安全模型的一部分,運行在iFrame中的請求將與其餘的頁面請求分開處理。這是他們的第三方cookie保護的一部分。據我瞭解,Firefox22將開始做同樣的事情,但沒有那麼嚴格。

如果您確定您確實想要解決這個問題,請將PHP的會話Id cookie取出並將其放在查詢字符串中,以請求iFrame。然後,您可以從查詢字符串中提取會話ID並使用該ID。 (如果你這樣做,你將不會在cookie數據中出現一個)。

+0

整個應用程序運行在iframe中,會話ID存儲在後端模型中太。所以我認爲所有這些電話都是同一個會話。另一件事:一旦我在單獨的選項卡中運行應用程序,然後再次在iframe中,問題就會消失:從那時起,直到我終止瀏覽器會話時,我每次都會得到相同的會話ID,就像我期望的那樣。 – Asciiom 2013-02-28 18:10:17

+0

如果確實是他們的政策造成這種情況,無論我在一個單獨的選項卡中打開應用程序,我都應該得到該行爲。 – Asciiom 2013-02-28 18:14:40

+0

Safari在檢測發生的事情方面正在變得更聰明,而不是讓您稱讚它。:) 這是另一個與Exchange解決方案的Stack Exchange答案:http://stackoverflow.com/questions/9930671/safari-3rd-party-cookie-iframe-trick-no-longer-working – 2013-03-01 14:39:57

相關問題