框架、会话和 P3P
创建一个模块来处理框架中的会话。
引言
之前,我遇到一个问题,原因是会话变量无法跨域使用,尤其是在使用框架时。
背景
当您有一个包含源位置跨域或位于不同服务器上的框架的网页时,就会出现此问题。
使用代码
经过一些研究,我发现解决此问题的办法是程序化地添加/修改必要的 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 条目。这帮助我解决了问题;希望它能帮助您解决问题。