65.9K
CodeProject 正在变化。 阅读更多。
Home

框架、会话和 P3P

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.14/5 (3投票s)

2009年2月24日

CPOL

1分钟阅读

viewsIcon

25013

创建一个模块来处理框架中的会话。

引言

之前,我遇到一个问题,原因是会话变量无法跨域使用,尤其是在使用框架时。

背景

当您有一个包含源位置跨域或位于不同服务器上的框架的网页时,就会出现此问题。

使用代码

经过一些研究,我发现解决此问题的办法是程序化地添加/修改必要的 HTTP 标头。

添加 HTTP 标头需要在添加任何页面 HTML 之前进行。最好的方法是通过一个外部模块,我们可以在应用程序请求的最开始处添加我们的标头。由于此问题在我们的许多应用程序中都很明显,这将是理想的选择,因为我们也可以重用此模块。

让我们创建一个模块来为我们添加所需的标头。首先,创建一个新的类库项目。我们将其命名为 ApplicationModule。现在,向我们的 ApplicationModule 项目添加一个名为 Application.cs 的新类。实现接口 IHttpModule。我们现在创建一个私有方法 OnStartOfApplication,该方法执行添加解决我们问题的所需标头的操作。此方法将在应用程序初始化期间通过 Application Init 方法调用。

public class ModuleRuss : IHttpModule
{
#region IHttpModule Members

     public void Dispose()
     {
     }

     public void Init(HttpApplication context)
     {
          context.BeginRequest += (new EventHandler(this.OnStartOfApplication ));
     }

#endregion

     private void OnStartOfApplication (Object source, EventArgs e)
     {
          HttpContext.Current.Response.AddHeader("p3p", 
            "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
     }
}

那么,如何在我们的 Web 应用程序中使用它?

首先,我们需要在我们的 Web 项目中添加对我们的 ApplicationModule.dll 的引用。然后,我们需要在 Web.Config 文件中的 <httpModules> 部分引用我们新添加的 ApplicationModule

<add name="externalModule" type="ApplicationModule.Application, ApplicationModule"/>

关注点

现在,使用 Fiddler 或 IE Watch,您可以查看您的响应标头,并看到您有一个新的 P3P 条目。这帮助我解决了问题;希望它能帮助您解决问题。

© . All rights reserved.