C#/IIS会话在Iframe中仅某父站点可用,新站点失效
跨域嵌入会话失效问题排查
环境背景
客户拥有三个站点:
- WordPress站点:
site1.org - C#/IIS(.NET Framework 4.5)应用:
app.org - 开发中新站点:
newsite.org
app.org核心代码实现
自定义登录脚本(设置会话并跳转)
Session[UtilityFunction.Session.SessionConstants.USERNAME] = obj.UserName; Session[UtilityFunction.Session.SessionConstants.USERID] = obj.UserProfileId; Session[UtilityFunction.Session.SessionConstants.FIRSTNAME] = obj.FirstName; return RedirectToAction("LoginAccountHome", "Home");
会话检查自定义属性
public class SessionTimeoutAttribute : ActionFilterAttribute { /// <summary> /// Check if the session is available and redirect to login if session not available /// </summary> /// <param name="filterContext">Action Executing Context</param> public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContext ctx = HttpContext.Current; if (HttpContext.Current.Session[PLTMain.UtilityFunction.Session.SessionConstants.USERID] == null) { string redirectTo = "~/Account/Login"; redirectTo = string.Format("~/Account/Login?returnUrl={0}", HttpUtility.UrlEncode(HttpContext.Current.Request.RawUrl)); filterContext.Result = new RedirectResult(redirectTo); return; } base.OnActionExecuting(filterContext); } }
当前嵌入情况
site1.org通过iframe嵌入app.org可正常设置会话:
<iframe id="iframe" class="login-page" src="https://app.org/main" style="width: 100%; border: none; height: 816px; display: inline-block;"></iframe>
newsite.org嵌入时,会话无法设置且跳转回登录页,本地HTML文件测试也存在相同问题。
已尝试操作
- 浏览器测试:Firefox正常,Chrome/Edge失效,推测Chromium系浏览器安全限制更高。
- 代码检查:未发现IP或Referer相关规则。
- 修改
web.config:添加CORS配置及sessionState的cookieSameSite="None"。 - IIS站点配置:添加CORS响应头。
问题
- 这种情况是否存在重大安全隐患?
- 除已尝试的方法外,还有哪些解决方案?
内容的提问来源于stack exchange,提问作者Kris Campbell
相关产品推荐
相关产品推荐

