我们有一个应用程序,它是基于ASP.NET WebForm的页面(ASPX,ASHX)和ASP.NET WebApi的融合。更重要的是,我们仅使用InProc会话(在LB上使用粘性会话)
该应用程序很旧,最近我们开始开发ASP.NET WebApi,以通过Ajax调用直接在页面中使用它们。 Web API层是无状态的,因此,作为API调用的一部分运行的代码将无权访问会话。
对Web API调用的授权检查有点笨拙,它依赖于ASP.NET会话ID cookie值,并对照数据库条目进行交叉检查以查看会话是否仍然有效(在Session_end事件中将其删除)。 / p>
由于从未针对API跟踪会话(由于无状态API),我们认为对于以SPA方式开发的页面可能会触发不必要的ASP.NET会话超时。
然而,经过一些测试,我们的信念被证明是错误的。我们发现,即使HttpContext
中无法访问该会话,该会话仍在滑动。
我们通过在不同时间进行proc转储并观察存储了_utcExpiry
引用的System.Web.Cache.CacheEntry
的{{1}}来调试此问题。
以下是在开始任何API调用之前,此特定条目的内存转储的屏幕截图,
在调用了一些API之后,我们再次进行了转储并检查了相同的条目,并且到期时间滑了一分钟,
请比较两张图片中的_utcExpiry列。
感谢您可以分享您的经验/知识。我们计划主要使用SQL Server进行OutOfProc会话,并想知道是否会存在相同的行为。