SessionStateStoreProviderBase.GetItemExclusive Method
从session data store中返回read-only session-state data.
public abstract SessionStateStoreData GetItemExclusive(
HttpContext context,
string id,
out bool locked,
out TimeSpan lockAge,
out Object lockId,
out SessionStateActions actions
)
下面主要是对上面几个参数的描述:
context就是HttpContext
id 就是SessionID
locked 就是是否lock
lockAge 返回值时,包括一个TimeSpan对象,是设置一个session data store 被lock的时间.
lockId 包括一个当前请求lock的标识.
actions 包括一个SessionStateActions值.表示当前session是否没有初始化.
在请求开始时:SessionStateModule 对象调用GetItemExclusive方法,在这个期间有一个AcquireRequestState事件,当EnableSessionState属性设置为true时,也是默认情形,如果EnableSessionState属性设置为ReadOnly,SessionStateModule对象调用的方法就改为GetItem方法.
GetItemExclusive返回一个SessionStateStoreData对象主要是从数据存储中移植session信息,更新存储数据的有效日期,并且在请求期间在存储数据中lock session-item data.如果在数据存储中没有session-item数据,这时GetItemExclusive方法设置locked参数为false并且返回null引用.这个原因SessionStateModule对象会在数据存储中调用CreateNewStoreData方法去创建一个新的session item.如果session-item数据被找到但数据被lock,这时GetItemExclusive方法设置locked参数为"true",设置lockAge参数为当前日期和时间减去这时的日期和当item被锁时的时间(从数据存储中找回),设置lockId参数为从
数据存储中找回的lock标记,并且返回一个null引用.这个原因是SessionStateModule对象在每间隔半秒就会常识找回session-item信息并且获得关于数据的一个lock.如果lcokAge参数值设置为超越ExecutionTimeout,然后SessionStateModule 调用ReleaseItemExculusive方法去清出这个lock session-item 数据,并且然后再调用GetItemExclusive方法.
当cookieless和regenerateExpiredSessionId属性都设置为true时actionFlags参数才被使用.一个actionFlags值设置为初始化表示在session数据存储中的实体是一个新的需要初始化的session.在session数据存储中一个没有初始化实体被一个调用CreateUninitializedItem方法创建.如果从session数据存储的item中不是一个非初始化 item,这个actionFlags参数将被设置为"0";
自定义session-state store 实现支持cookieless sessions 应该设置actionFlags参数返回值是从session 数据存储当前item.如果actionFlags参数值为请求session-store item与InitialzeItem 枚举值相等,然后GetItemExculsive方法应该在设置在数据存储值为0之后设置actionFlags参数.
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
下面主要是对上面几个参数的描述:
context就是HttpContext
id 就是SessionID
locked 就是是否lock
lockAge 返回值时,包括一个TimeSpan对象,是设置一个session data store 被lock的时间.
lockId 包括一个当前请求lock的标识.
actions 包括一个SessionStateActions值.表示当前session是否没有初始化.
在请求开始时:SessionStateModule 对象调用GetItemExclusive方法,在这个期间有一个AcquireRequestState事件,当EnableSessionState属性设置为true时,也是默认情形,如果EnableSessionState属性设置为ReadOnly,SessionStateModule对象调用的方法就改为GetItem方法.
GetItemExclusive返回一个SessionStateStoreData对象主要是从数据存储中移植session信息,更新存储数据的有效日期,并且在请求期间在存储数据中lock session-item data.如果在数据存储中没有session-item数据,这时GetItemExclusive方法设置locked参数为false并且返回null引用.这个原因SessionStateModule对象会在数据存储中调用CreateNewStoreData方法去创建一个新的session item.如果session-item数据被找到但数据被lock,这时GetItemExclusive方法设置locked参数为"true",设置lockAge参数为当前日期和时间减去这时的日期和当item被锁时的时间(从数据存储中找回),设置lockId参数为从
数据存储中找回的lock标记,并且返回一个null引用.这个原因是SessionStateModule对象在每间隔半秒就会常识找回session-item信息并且获得关于数据的一个lock.如果lcokAge参数值设置为超越ExecutionTimeout,然后SessionStateModule 调用ReleaseItemExculusive方法去清出这个lock session-item 数据,并且然后再调用GetItemExclusive方法.
当cookieless和regenerateExpiredSessionId属性都设置为true时actionFlags参数才被使用.一个actionFlags值设置为初始化表示在session数据存储中的实体是一个新的需要初始化的session.在session数据存储中一个没有初始化实体被一个调用CreateUninitializedItem方法创建.如果从session数据存储的item中不是一个非初始化 item,这个actionFlags参数将被设置为"0";
自定义session-state store 实现支持cookieless sessions 应该设置actionFlags参数返回值是从session 数据存储当前item.如果actionFlags参数值为请求session-store item与InitialzeItem 枚举值相等,然后GetItemExculsive方法应该在设置在数据存储值为0之后设置actionFlags参数.