使用 ASP.NET WebForms 在 iframe 中记住会话

Remembering Session in iframe with ASP.NET WebForms

旧的 WebForms 应用程序中出现奇怪的行为。我不能给你link,或者大图,我只能问具体的细节,所以也许有人有想法探索哪条路。

域 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 或其他原因,最近关于框架内的会话策略是否发生了某些变化? 我该如何解决这个问题?

我只是通过使用 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();                
        }