2009-08-12 21 views
1

我設置了一個A/B測試,它需要將相當大量的數據臨時存儲在cookie中。在測試我的代碼時,我設法讓cookie超過了4kB。 Safari設置cookie。在隨後的頁面加載中,由於cookie太大,Apache返回了一個錯誤。爲什麼Safari會讓你將cookie設置爲4kB?

我在Firefox上測試了它,它簡單地忽略了cookie,這對我來說似乎是正確的行爲。

我已經看到這發生在第一手GMail之前。我曾經收到錯誤的請求錯誤,並將不得不刪除我的cookies。這是一個已知問題已經解決。

我在網上找不到有關Safari允許超過4kB的cookie的信息。這不是很危險嗎?我們的用戶可能被阻止訪問我們的網站,不知道發生了什麼的想法是可怕的。我不知道如何從我們這邊刪除這些cookie,如果它們太大,我們會怎麼做。

爲什麼Safari會這樣做?做其他瀏覽器嗎?

回答

0

該標準規定了一定的最小大小的餅乾。但是,它沒有指定最大大小。任何瀏覽器都可以存儲任何大小的cookie,只要它在至少 4kb。 作爲網絡開發人員,您只會嘗試創建可在所有瀏覽器中工作的Cookie。這並不是狩獵之旅,它只是通過接受它來處理大型cookie的狀況,而其他人則拒絕接受它。這既不正確也不正確。它只是被允許。

我不遵循你的觀點,認爲它有潛在的危險。如果用戶被禁止訪問您的網站,由於您設置的cookie在某些瀏覽器中不起作用,那是您的錯,不是嗎? Safari只是在其他瀏覽器不支持的地方處理它。

+0

是的,你對規範是正確的。我發現不幸的是,事情的設置方式很容易讓你陷入陷阱中,瀏覽器接受超大的cookie和拒絕服務器的web服務器。 Webkit似乎是這裏的特例。我測試過的其他瀏覽器不接受cookie。 搜索「壞請求cookie」表明Google,Youtube和其他網站出現此問題。有危險。但我想你是對的,最後你不能責怪任何人,除了你自己。 – joshuaxls 2009-08-12 05:54:54

+0

開發人員已經有很長的歷史瞭解這個限制。如果您真的需要存儲大量信息,大多數服務器端框架可以存儲「會話」數據。也就是說,cookie僅僅成爲包含真實信息的服務器上的數據庫條目的關鍵。 asp.net使整個頁面變成一個巨大的形式,並將信息隱藏到隱藏字段中,並捕獲所有鏈接點擊與JavaScript。所有新的瀏覽器都有一個新的'webstorage'api可以訪問javascript。 – Breton 2009-08-12 06:13:52

+0

是的,我很清楚這一點,我們每天做大約1000萬次頁面瀏覽,儘量限制我們數據庫的負載,因此基於cookie的測試,但現在我們堅持使用數據庫支持的測試 – joshuaxls 2009-08-12 07:07:23

相關問題