技术开发 频道

.NET会话管理


Asp.Net中为会话状态提供以下特性:

<!--[if !supportLists]--> 1.在禁用Cookies的浏览器中运行

<!--[if !supportLists]--> 2.<!--[endif]-->对于已经存在的会话请求进行辨识

<!--[if !supportLists]--> 3.存储会话范围内的数据在多请求钟使用。这些数据可以被配置成持续贯穿于IIS重启和运行在多处理器(Web园)和多服务器(Web场)的环境,像单处理器和单机环境情况下一样。

<!--[if !supportLists]--> 4.<!--[endif]-->激发会话事件,如Session_Start和Session_End,这些在global.asax或者是其他的应用代码里处理

<!--[if !supportLists]--> 5.<!--[endif]-->如果会话结束或超时,则会自动释放会话资源

    默认情况下,会话状态作为Asp.Net进程的一部分存储在服务器内存中,但是也可以通过配置将个别会话存储在Asp.Net进程外或者单独的状态服务器上还可以存储在SQL Server数据库上,这样,即使Asp.Net进程重启或者崩溃,会话还能继续运行。

    Asp.Net采用120位长的SessionID来标示和跟踪会话,这个SessionID从客户端传送到服务器端并从服务器返回。所用的方式是HTTP Cookie还是修改了URL取决于应用程序的配置。.Net Framework会自动定义SessionID而无需人工编程处理。SessionID由URL-legal ASCII字符组成,并具备

<!--[if !supportLists]--> <!--[endif]-->SessionID是全局唯一的,不可能存在两个会话具有相同的SessionID
<!--[if !supportLists]-->SessionID是随机的,即使知道已存在的SessionID也很难活得其它会话的SessionID
会话状态通过HttpSessionState类的内容集合属性实现。这个集合是一个关键值(非泛型)字典,其中包括所有会话状态字段对象,而这些对象是编程直接添加的。使用会话关键字可以设置和检索字典对象。

会话状态的配置:

    页面会话状态的配置我们可以由页面顶部的Page指令来控制(在页面的html代码的开头可以找到该 配置项)

    默认状态系统是启用会话状态的,我们也可以通过在Page指令中添加EnableSessionState属性来启 用,如


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebStateStudy._Default" EnableSessionState="true" %>
    禁用页面会话状态:

EnableSessionState =false
    将会话状态设为只读,使其只能读取不能修改会话数据

EnableSessionState = “ReadOnly”
    注意:EnableSessionState是大小写敏感的,禁用会话状态或者将其设置为只读的原因是为了提高 性能。如果在页面中不必使用会话状态,那么可以通过禁用会话状态以得到小幅度的性能提升,同时还可节约服务器资源。

    默认情况下,会话状态作为Asp.Net进程的一部分存储在服务期内存中。但通过预设Web.config和SessionState配置节的mode属性,可使会话状态独立于Asp.Net进程存储,或存储在独立的状态服务器,或存储在SQL Server数据库。这样,会话状态可在Asp.Net进程失败停止或重启的情况下仍然存在。除了突发的失败停止,Asp.Net也可被配置为每个进程在处理一定数量的请求或工作一段时间之后定期重启,以提高可靠性和稳定性。会话状态在这些重启间会得以保存。

    在Web.config中,会话状态配置信息包含在<System.web>节点中,而<System.web>被包含在 <configuration>节点中。如下:
<System.web> <sessionState mode="InProc" cookieless="false" timeout="20" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;userid=sa;password=" /> . </System.web>


0
相关文章