我目前正在使用ASP.Net状态服务器在我的应用程序中存储会话数据。
作为一个更大的会话问题的解决方法(不要问),我需要从会话中删除一组包含某个字符串的键,但我不知道确切的键。
我想做类似下面代码的事情。由于会话数据不在流程中,我担心的是,通过这样做,我将整个会话数据加载到ASP.Net工作进程中。这是一个问题,因为当前的应用程序会在会话中放入太多数据(我们试图解决的长期问题)。
有谁知道如何在会议期间访问会话?有没有办法迭代会话密钥而不将会话加载到内存中?
//does this line cause the session to be loaded back into the WP?
var session = HttpContext.Current.Session;
if (session != null)
{
//what about this line?
var keysToRemove = session.Keys.Cast<object>().
Where(key => key.ToString().Contains(MYKEY)).ToList();
foreach (var key in keysToRemove)
{
session.Remove(key.ToString());
}
}
答案 0 :(得分:1)
整个会话始终根据用户对内置提供程序的请求加载到内存中。它在执行到正常页面代码之前加载(不像你想象的那样懒惰)。您可以做的唯一阻止加载的方法是让模块监听其中一个早期事件并从请求中删除会话ID。
注意:session.Keys已经是字符串的集合,因此您可以删除这种复杂的转换。