void OnSessionRemoved(string key, object value, CacheItemRemovedReason reason) { if (expireCallback != null) { if (key.StartsWith(CachePrefix, StringComparison.OrdinalIgnoreCase)) { key = key.Substring(CachePrefixLength); } if (value is SessionStateStoreData) { expireCallback(key, (SessionStateStoreData)value); } else if (value is InProcSessionItem) { InProcSessionItem item = (InProcSessionItem)value; if (item.resettingTimeout) { item.resettingTimeout = false; return; } expireCallback(key, new SessionStateStoreData( item.items, item.staticItems, item.timeout)); item.Dispose(); } else { expireCallback(key, null); } } else if (value is InProcSessionItem) { InProcSessionItem item = (InProcSessionItem)value; if (item.resettingTimeout) { item.resettingTimeout = false; return; } item.Dispose(); } }