c# - 使用 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 或其他原因,最近有关框架内的会话策略是否发生了变化?我该如何解决?
解决方案
我只是通过使用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();
}
推荐阅读
- scala - 一次从多个对象导入声明
- javascript - 如何描述输入类型是相等的并且在流中是有限的一组可能的类型?
- html - HTML元素的子元素在换行时具有不同的背景
- c# - 我无法将对象拖到代码属性中,以将其连接到公共组件
- regex - Dialogflow RegEx 字母数字(语音)
- javascript - 遍历列表项以设置装饰值
- javascript - MSAL.js acquireTokenSilent 生成的空令牌
- python-3.x - Pandas 文件更新/替换另一个参考文件中的值
- c# - 属性更改时重新启动可观察订阅
- reactjs - ./src/components/Car.js 模块未找到:无法解析 'C:\Users\Felix\source\repos\React\car-app\src\components 中的 'react-table/react-table.css' '