2009-07-14 118 views
14

這是一個場景,用戶在我們的WebApp中打開一個非安全頁面,讓我們在瀏覽器中調用PageA,然後單擊其中的鏈接,將它們帶到PageB的安全實例。一旦進入PageB,用戶可以隨後單擊一個鏈接,將它們帶回到PageA的安全實例(它們已經查看過並位於OutputCache中)。我觀察到,即使PageA在訪問PageB(安全版本)之後通過不同的URL訪問,它實際上是拉動之前的緩存副本而不是重新創建一個。我在一個調試會話中驗證了這種行爲,並且感到驚訝的是,ASP.Net使用相同的OutputCache項目作爲頁面的安全副本。如何根據http vs https配置ASP.Net OutputCache以改變?

我的問題是爲什麼這樣呢?我如何告訴ASP.Net OutPutCache將安全URL的訪問視爲與非安全等效項目不同/唯一的項目?

[背景]

我們最近打開我們的網站上的圖像使用Scene7/Akamai的所有圖像。因此,我們添加了代碼以在安全連接上查看給定頁面時使用不同的Scene7 URL。此OutputCache問題不允許輸出安全url的邏輯執行,並導致醜陋的瀏覽器警告。

回答

8

我認爲你可以做一個VaryByCustom是=「方案」,並添加到您的Global.asax.cs文件(計有,我使用以及應用程序版本&用戶其他幾個人):

public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
     if (custom.Equals("version", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      Assembly asm = Assembly.GetExecutingAssembly(); 
      string[] parts = asm.FullName.Split(','); 
      string version = parts[1].Trim().ToLower(); 
      return version; 
     } 
     else if (custom.Equals("user", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      var user = Membership.Users.CurrentUser; 
      return null == user ? string.Empty : user.Id.ToString(); 
     } 
     else if (custom.Equals("scheme", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      var scheme = context.Request.IsSecureConnection ? "https" : "http"; 
      return scheme; 
     } 
     else 
      return base.GetVaryByCustomString(context, custom); 
    } 
1

我從來沒有嘗試過,但你也許可以使用輸出緩存VaryByHeader屬性和「主持人」標頭,指定所請求的資源的Internet主機和端口號。

我想問的問題是爲什麼你要從PageB重新導向到PageA以上的安全。如果它不是一個非安全的頁面,是不是可以將PageB重定向修復爲始終重定向到不安全的頁面。

+0

+1感謝您的迴應。我的例子比我的現實簡單得多。實際上,我有很多pageB和很多pageA的。要將所有鏈接更改回pageA,並將其作爲pageB的非安全性,將會工作太多,我希望有一種更簡單的方法。 – James 2009-07-14 03:29:59

13

這並不回答問題的措辭,但它可能會消除您需要根據方案進行更改。如果您對Scene7網址的「http://」進行了硬編碼,則可以將其更改爲與方案相關的網址。

<img src="http://site.scene7.com/images/someimage.jpg" /> 
=> 
<img src="//site.scene7.com/images/someimage.jpg" /> 

這將導致瀏覽器自動以推薦頁面的方式請求資源。假設你有一個適用於你的scene7域名的SSL證書。

+1

+1 - 有趣的我沒有意識到這是可能的。 – James 2009-10-01 03:11:39

+1

+1 - 如果可以的話,會做得更多...這應該被標記爲答案。 – caryden 2009-11-30 18:03:19