.NET 6中跨域iframe会话Cookie无法持久化问题排查
针对本地环境正常、Azure部署后跨域IFrame会话无法持久的问题,结合你的配置和场景,给出以下排查与解决步骤:
确认Azure HTTPS与Cookie Secure属性匹配
代码中已设置CookieSecurePolicy.Always,需确保Azure App Service已强制启用HTTPS(在门户的"SSL设置"中开启"HTTPS only")。若Azure端存在HTTPS跳转异常,会导致Cookie因非Secure环境被浏览器拦截。显式设置Session Cookie的Domain属性
本地localhost无需指定Domain,但部署到Azure后,需将Cookie的Domain绑定到你的Azure应用域名(如your-app.azurewebsites.net),否则跨域IFrame请求无法正确关联会话Cookie。修改Session配置:builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(300); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; options.Cookie.SameSite = SameSiteMode.None; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.Domain = "your-app.azurewebsites.net"; // 替换为实际Azure域名 });同步Azure门户与代码中的CORS配置
Azure App Service门户的"CORS"设置会覆盖代码中的AllowAnyOrigin()配置。若门户中指定了具体允许的Origin,需确保包含IFrame所在的父域名;若要保持代码中的宽松策略,需在门户中将允许Origin设置为*。检查Azure会话状态与缓存配置
代码中使用AddDistributedMemoryCache(),但Azure App Service的"会话状态"配置(门户->配置->通用设置)需确保启用,且若使用分布式缓存(如Azure Redis),需验证连接字符串配置正确,避免会话数据无法跨实例共享。排查浏览器第三方Cookie拦截
部分浏览器默认拦截第三方Cookie,即使设置了SameSite=None。可通过浏览器开发者工具(Application面板->Cookies)查看:- 会话Cookie是否成功写入
- 跨域IFrame发起请求时,Cookie是否被携带
内容的提问来源于stack exchange,提问作者Sean T

