使用 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();
}
旧的 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();
}