我使用会话结束是否不正确?
在我的应用程序中,我有一个缓存来加速页面加载,它工作得很好。最近,有人建议我不要清空内存而泄漏内存,并在会话结束时实现一个方法,该方法将清除与该会话ID关联的所有缓存项。
偶尔,尽管我开始看到反常的行为。加载页面时,很少会看到空页面,因为该页面的缓存是空的,所以会显示异常。我在缓存访问和会话结束方法中放置了一个调试器断点,希望在下次发生时捕获它。
下一次它发生的时候,我对实际发生的事情感到非常惊讶。我的浏览器一直处于打开状态,但空闲了很长时间,所以我猜想它有一个过时的会话cookie。它会命中页面的服务器,该服务器会将页面的副本放入缓存中。当页面仍在加载时,会立即调用会话\结束,从而将其从缓存中删除。如果我重新加载浏览器,会话会一直被调用,非常想关闭我的会话,因为糟糕的浏览器一直在请求。
所以我想我真正的问题是:
-
如果旧的会话cookie对IIS来说是一种诅咒,那么为什么浏览器不获取新的会话cookie呢?
-
会话结束是否只是设计为不以这种方式使用?
-
有没有更好的方法来做我想做的?
@sosh-我的global.asax.cs:
protected void Session_End(Object sender, EventArgs e)
{
//clean up object cache on session expiry
string sessionID = this.Session.SessionID;
foreach (string key in Global.DataGroups.Keys)
{
if (key.EndsWith(sessionID))
{
Global.DataGroups.Remove(key);
}
}
}