我有一个使用自定义会话包装器的Asp.Net MVC 4应用程序。会话以SQL服务器保存(SQL Server模式-20分钟后过期)。典型的客户在iframe中打开应用程序,处理订单,并在完成后关闭iframe。直到最近,IT安装了最新的Microsoft更新,它一直运行良好。在iframe内时,所有ajax请求的应用程序都返回500错误消息。经过一些调试后,我意识到会话对象为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
更新于01/09/2020
经过一些额外的调试后,请求中不包含会话信息。结果,因为会话为空,所以永远不会执行会话不为空的代码。
HttpContext.Current.Session["Order"] != null
最后,我在this论坛中找到了答案。将'cookieSameSite =“ None”'添加到我的sessionState标记中可以解决此问题。