2009-07-14 38 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