首页/技术开发/内容

ASP.NET 中 Session 完成原理浅析 [2] 状态管理器

技术开发2024-06-10 阅读()
状态管理本来是一件很美好的事情,嘿嘿,只可惜总是有些厂商在实现的时候考虑得不那么周全。例如 MS 在 ASP 中的状态管理实现就比较烂,因为只实现了一个进程内的基于内存的状态管理,故而存在很多问题:

1.所有的 Session 数据都保存在 Web 服务的进程中,会造成服务器支持会话数量受到服务器内存资源的限制问题,同时也因为大量非活动会话导致内存被无效占用。
2.服务器进程崩溃会导致所有的会话数据丢失。
3.会话无法跨进程或在负载均衡情况下使用,除非负载均衡技术保障同一用户每次都能被路由到同一机器上。就算这样也无法保障服务器崩溃造成的会话数据丢失。
4.需要 Cookie 的支持,而现在因为安全性问题,很多人在浏览器中关闭了 Cookie 和 js 的支持。

为此 ASP 的使用者不得不自己手工将会话信息以会话 ID 为主键同步到外部数据库中,以缓解类似问题。

而在 ASP.NET 中,因为设计时就考虑了这些问题,能够避免这些限制:

1.支持进程外的状态管理,通过独立状态管理服务或 SQL Server 状态服务器管理会话状态
2.支持不使用 Cookie 的状态维护,通过在 URL 中自动增加会话 ID 来避免使用 Cookie
3.通过独立的状态管理服务或SQL Server 状态服务器支持负载均衡时同步使用会话信息

实现这些特性的正是上节提到的 SessionStateModule.InitModuleFromConfig 函数中,根据 sessionState 标记的 mode 属性选择的四种不同的状态管理器实现。


以下内容为程序代码:

<system.web>
<sessionState mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="10"
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
cookieless="false"
timeout="20" />
</system.web>



Off 模式禁止会话管理,同时 ASP.NET 还允许通过在页面中以 EnableSessionState 属性细粒度管理页面的会话支持状态
以下内容为程序代码:

<%@ Page EnableSessionState=" True(北联网教程,专业提供视频软件下载)

第1页  第2页  第3页 

……

相关阅读