Asp.net mvc 4 Asp.Net MVC 4应用程序-在已清除的SQL Server会话中发送请求

Asp.net mvc 4 Asp.Net MVC 4应用程序-在已清除的SQL Server会话中发送请求,asp.net-mvc-4,iframe,session-variables,session-state,Asp.net Mvc 4,Iframe,Session Variables,Session State,我有一个Asp.NETMVC4应用程序,它使用自定义会话包装器。会话正在SQL Server中保存(SQL Server模式-20分钟后过期)。典型的客户在iframe内部打开应用程序,处理订单,完成后关闭iframe。它一直工作良好,直到最近安装了最新的Microsoft更新。应用程序在iframe中发出的所有ajax请求都返回500错误消息。经过一些调试,我意识到session对象为null。因此,应用程序引发了一个null异常。如果我在iframe之外使用该应用程序,它将按预期工作。我一直

我有一个Asp.NETMVC4应用程序,它使用自定义会话包装器。会话正在SQL Server中保存(SQL Server模式-20分钟后过期)。典型的客户在iframe内部打开应用程序,处理订单,完成后关闭iframe。它一直工作良好,直到最近安装了最新的Microsoft更新。应用程序在iframe中发出的所有ajax请求都返回500错误消息。经过一些调试,我意识到session对象为null。因此,应用程序引发了一个null异常。如果我在iframe之外使用该应用程序,它将按预期工作。我一直找不到合适的工作。如果没有解决方法,我将不得不开始添加隐藏标签,以便在请求期间可以使用其中的一些值。有人有解决这个问题的方法吗

会话包装类

[Serializable]
[SessionExpireFilter]
public class SessionWrapper
{
    public static CurrentOrder currentOrder
    {
        get
        {
            if (HttpContext.Current.Session["Order"] != null)
            {
                return (CurrentOrder)HttpContext.Current.Session["Order"];
            }
            else
            {
                return null;
            }
        }
        set
        {
            HttpContext.Current.Session["Order"] = value;
        }
    }
}
当用户启动订单时初始化包装

CurrentOrder currentOrder= new CurrentOrder();
SessionWrapper.CurrentOrder = currentOrder;
读取或设置会话变量。

SessionWrapper.CurrentOrder.OrderId = anOrderID

if(SessionWrapper.CurrentOrder != null && SessionWrapper.CurrentOrder.OrderId > 0)
   anOrderId = SessionWrapper.CurrentOrder.OrderId
于2020年9月1日更新

经过一些额外的调试后,请求不包括会话信息。因此,when session not null的代码段永远不会执行,因为session为null

HttpContext.Current.Session["Order"] != null

最后,我在论坛上找到了答案。将“cookieSameSite=”None“添加到我的sessionState标记中可以修复此问题