首页 > 解决方案 > 使用 ASP.NET WebForms 在 iframe 中记住会话

问题描述

在旧的 WebForms 应用程序中发生了奇怪的行为。我不能给你链接,或者大图,我只能要求具体细节,所以也许有人知道用哪种方式探索。

域 A 上的应用程序在 iframe 中嵌入另一个域 B 上的应用程序。(如果它在同一个域上托管站点,那很好,问题不会发生。)

domainA.com:
<iframe src="http://domainB.com/page1.aspx" />

page1.aspx 写入一个 Session 变量:

http://domainB.com/page1.aspx:
HttpContext.Current.Session["UTCOffset"] = utcOffset.ToString();

但是,该 iframe 中的 ASHX 处理程序 handler.ashx 无法读取 Session 变量值。

http://domainB.com/handler.ashx:
string utcOffset = Convert.ToString(HttpContext.Current.Session["UTCOffset"]);

utcOffset 是空字符串。

请记住,当它不在 iframe 中时(例如,通过浏览器请求http://domainB.com/page1.aspx ),它可以正常工作。如果这都托管在同一个域上,它也可以正常工作。直到最近,它在大多数主要浏览器上都运行良好。

由于 CORS 或其他原因,最近有关框架内的会话策略是否发生了变化?我该如何解决?

标签: c#asp.netsessioniframewebforms

解决方案


我只是通过使用cookie来解决它。测试了一下,效果很好。

因此,而不是 page1.aspx 中的代码:

            HttpCookie UTCOffset = new HttpCookie("UTCOffset");
            UTCOffset.Values.Add("utcOffset", utcOffset.ToString());
            UTCOffset.Expires = DateTime.Now.AddDays(1);
            Response.Cookies.Add(UTCOffset);

在处理程序中,而不是当前代码:

        string utcOffset = string.Empty;
        HttpCookie UTCOffset = HttpContext.Current.Request.Cookies["UTCOffset"];
        if (UTCOffset != null && !string.IsNullOrEmpty(UTCOffset.Values["utcOffset"]))
        {
            utcOffset = UTCOffset.Values["utcOffset"].ToString();                
        }

推荐阅读