主页面和aspx页面中的sql server会话

时间:2011-08-28 03:07:41

标签: asp.net session

我正在使用SQL服务器会话状态。

如果我正在使用一个调用会话中存储的几个变量的母版页,然后在后面的aspx代码中再次使用该会话,那么这会触发:

a)2个数据库读取,1在主页面处理期间,第二个在aspx运行时读取。

b)1个数据库读取,会话在主页面处理过程中加载,并在页面生命周期内持续存在。

感谢。

2 个答案:

答案 0 :(得分:3)

母版页是附加到页面的用户控件,并按此处理。因此,此问题不仅适用于母版页,而且适用于所有用户控件,自定义控件和附加到页面的标准控件。

SQL Server存储的会话状态根据请求被序列化/反序列化到SQL Server中。这不是变量的请求,而是HTTP请求本身。

在页面生命周期中,将在AcquireRequestState事件中检索值,并将其推送到ReleaseRequesteState中。这些事件是HttpModule系统的一部分,因此由Page类继承。

所以,回答你的问题,在页面的生命周期开始时(在INIT之前)只有一次调用到SQL Server来获取整个会话变量集,而不管你在Session State中有多少变量。然后在页面的生命周期结束时(这是在RENDER& UNLOAD之后),有第二个数据库调用来存储会话状态

答案 1 :(得分:2)

读取只会导致1,会话对象在请求开始时从商店重新创建。

当页面将数据保存到Session时,该值将加载到由HttpSessionState类托管的定制词典类中。当正在进行的请求完成时,字典的内容将刷新到状态提供程序。如果会话状态为空,因为没有数据以编程方式放在字典中,则没有数据序列化到存储介质,更重要的是,在ASP.NET缓存,SQL Server或NT状态服务中没有创建任何插槽跟踪当前会话。这是出于性能原因而完成的,但是对会话ID的处理方式有一个关键的反响:为每个请求生成一个新的会话ID,直到某些数据存储在会话字典中。 - 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa479041.aspx