2011-11-30 53 views
1

我有一个使用SQLServer会话模式的ASP.NET应用程序。我在我的页面中创建了下面的属性。ASP.NET生命周期。将会话保存到数据库

internal List<string> TargetTypes 
{ 
    get { return Session["TargetTypes"] != null ? Session["TargetTypes"] as List<string> : null; } 
    set { Session["TargetTypes"] = value; } 
} 

在我为了值添加到它访问该属性页后来如下图所示

TargetTypes.Add("Value1"); 
TargetTypes.Add("Value2"); 
TargetTypes.Add("Value3"); 

我关注的是如何在会话管理。每次访问此属性时,ASP都会读/写数据库吗?或者是否存在用于将所有会话保存到数据库的事件?

+0

这不相关,但是当转换失败时'as'关键字不会返回null吗? – James

回答

4

Session是如何管理的?

当浏览器发送请求到你的网站,那么服务器会生成一个名为会话ID和 这个“SESSIONID” UID是在会话表管理。在服务器上创建一个表,用于管理各种Web客户端(浏览器)的会话ID。 此会话ID发送给客户端。此会话在第一次请求后也会发送到服务器。

有两种模式InProcOutProc(Sql服务器,状态服务器等)。 检查这些链接了解更多信息:
Session State Management in Asp.net
Session State

当您设置<sessionState mode="SQLServer"然后将其保存会话值到SQL数据库。按照此链接了解SessionState如何在StateServer模式下工作。
Fast, Scalable, and Secure Session State Management for Your Web Applications

请问ASP读取/写入到数据库中每一次我访问此 财产?

会话状态由SessionStateModule类管理,该类调用会话状态存储提供程序在请求期间的不同时间将会话数据读写到数据存储区。在请求开始时,SessionStateModule实例通过调用GetItemExclusive方法或通过调用GetItem方法将EnableSessionState页属性设置为ReadOnly,从数据源中检索数据。在请求结束时,如果会话状态值已被修改,SessionStateModule实例将调用SessionStateStoreProviderBase.SetAndReleaseItemExclusive方法将更新的值写入会话状态存储。 按照this了解更多详细信息,并检查SessionState Overview为您的问题澄清secondthird

关于你的代码片段:当会话第一次启动,那么所有的值将为空,所以你必须检查会议,它是新的会议?正如你在Getter中所做的那样。