4

我正在讀一本關於MVC2,並在的OutputCache部分它指出:的OutputCache和授權在MVC3過濾器

警告在前面的「授權過濾器是怎樣互動 與輸出緩存,」我解釋說, [授權]具有特殊的 行爲,以確保未經授權的訪問者因爲已經被緩存而無法獲取敏感的 信息。 但是,除非您專門阻止它,否則緩存的輸出可能會被傳送給不同的授權用戶,而不是最初爲其生成的用戶。一個防止的辦法是 實現特定內容項目作爲 授權過濾器(從AuthorizeAttribute派生)的訪問控制,而不是 簡單地執行授權邏輯內嵌在一個操作方法, 因爲AuthorizeAttribute知道如何避免被繞過輸出 緩存。仔細測試以確保授權和輸出緩存以您期望的方式進行交互。

這在MVC3中仍然如此嗎?

如果是肯定的,那麼防止發生這種情況的方法是什麼? (因爲書中的解釋過於模糊)。

問候。

回答

4

我認爲這是。

當您使用OutPutCache緩存數據時,這些數據將全局緩存。只要用戶被授權,用戶就會獲得緩存的數據。

是的,我們有輸出緩存的「VaryByParam」選項,但它也爲每個傳遞的不同參數創建一個新的緩存。這意味着它仍然是全球性的。

所以如果你想緩存基於用戶的不同數據,outputcache可能不是正確的做法。如果數據是用戶特定的,則會話是正確的選擇。這是什麼會議生活

+0

太好了,無論如何我會開始賞金,所以也許我可以捕捉更多的解釋:D感謝一百萬。 – vtortola

+0

因此,如果我使用「OutputCacheAttribute.VaryByHeader = Cookie」,它將在授權方面安全嗎?我想要緩存的是呈現的頁面,因爲它們中的一些很大並且具有很多生成邏輯。 – vtortola

+0

這是一個選項。但如果信息是關鍵的,那麼你應該不會依賴於存儲在客戶端的cookie。 – fengd