2009-09-03 34 views
1

我试图了解什么时候可以把某些对象放入用户会话中,并且想知道如何存储会话并从中检索值。如果我提出从会话状态提取密钥A的请求,它也会读取密钥B?当请求从用户会话中获取对象时,是否会加载整个会话?

我知道viewstate存储为一个大对象,并且我假设它一旦被完全加载就从我的代码访问。这与会话状态数据类似吗?还是只加载服务器请求的密钥?

因此,如果我的状态是20KB,并且我想从中获得一个5KB的值,它将读取所有20KB还是只读取我需要的5KB?

回答

2

默认情况下,会话状态存储在内存中,直到会话过期(给定用户不活动的一段时间)。视图状态根本不存储在请求之间,而是作为隐藏的表单域实际发送到页面。这些数据将在后续请求中发送回服务器。

要回答您的问题,默认行为是整个会话已加载,因此您是否实际访问它,它在那里和内存中。

有用于管理然而,这几个选项,你可以在这里找到一个很好的参考:

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

+0

ViewState放置在隐藏字段中,而不是会话状态。会话状态保留在服务器的内存中,这就是为什么当使用服务器场时,如果用户在后续请求中被退回到另一台服务器,或者服务器应用程序池被刷新,会话可能会丢失。 – NerdFury 2009-09-03 17:56:18

+0

对不起,我看错了。你确实说过视图状态。 – NerdFury 2009-09-03 18:04:12

0

默认情况下,用户会被存储在内存中。您可以将其配置为存储在数据库中,但它是序列化的,并在重新实例化时完全读出。

所以是的,如果你的用户会话中有20KB的数据,它总是会使用20KB的内存。