如何在弹出窗口中保留iframe中的会话状态?

时间:2009-10-05 11:32:53

标签: asp.net iframe popup session-state

我正在为客户制作一个网络应用程序,该客户希望将登录信息放在他们网站上的iframe内。在成功登录时,我们希望在新的弹出窗口中打开应用程序,但似乎登录的会话仅保留在iframe内部,而不是保留在主窗口或弹出窗口中。这只是IE中的一个问题,而不是任何其他浏览器。

有没有办法实现这个?

流程是这样的:

  1. 用户访问客户的网站(www.url1.com)
  2. 用户登录app中的应用程序 iframe(来自www.url2.com)
  3. iframe中的应用验证登录
  4. iframe中的应用使用window.open来 以新的,独立的方式打开应用程序 窗口
  5. 编辑: Fiddler显示iframe中发生的事情附加到一个iexplore进程,主窗口中发生的事情附加到另一个。这显然是问题所在,可以解决吗?

2 个答案:

答案 0 :(得分:3)

在iframe中设置Cookie,从其他域加载页面有时可能会导致一些奇怪的问题。如果cookie不起作用,很可能,您的登录也无法正常工作。 为了解决前一种情况,我必须做的是在IIS / Code中添加一个自定义的http标头,这突然使一切正常。

示例C#代码:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
}

答案 1 :(得分:1)

尝试使用Fiddler检查登录页面(在iframe中)创建的cookie是否发送到新打开的弹出窗口。如果没有,则可能是IE中的一个设置可以防止这种情况发生。

修改:要查看Fiddler中的Cookie,请转到检查员标签,然后转到标头。在Request header(up),您将看到从服务器发送到浏览器的cookie。在Response header(向下),您将看到从浏览器发送到服务器的cookie(它们应该被发送回浏览器以便后续请求)。