让我们看看这一段配置中所包含的内容的意思。sessionState 节点的语法是这样的:

< sessionState mode="Off|InProc|StateServer|SQLServer"
 
             cookieless="true|false"
 
             timeout="number of minutes"
 
             stateConnectionString="tcpip=server:port"
 
             sqlConnectionString="sql connection string"
 
             stateNetworkTimeout="number of seconds"
 
/>


必须有的属性是: 属性 选项 描述


mode 设置将 session 信息存储到哪里


         Off 设置为不使用 session 功能,


         InProc 设置为将 session 存储在进程内,就是 asp 中的存储方式,这是默认值,


        StateServer 设置为将 session 存储在独立的状态服务中,


         SQLServer 设置将 session 存储在 sql server 中。


可选的属性是: 属性 选项 描述


        cookieless 设置客户端的 session 信息存储到哪里,


        ture 使用 Cookieless 模式,


        false 使用 Cookie 模式,这是默认值,


         timeout 设置经过多少分钟后服务器自动放弃 session 信息,默认为 20 分钟。


stateConnectionString 设置将 session 信息存储在状态服务中时使用的服务器名称和端口号,例如: "tcpip=127.0.0.1:42424”。当mode 的值是 StateServer 是,这个属性是必需的。


sqlConnectionString 设置与 sql server 连接时的连接字符串。例如 "data source= localhost;Integrated Security=SSPI;Initial Catalog=northwind" 。当 mode 的值是 SQLServer 时,这个属性是必需的。


stateNetworkTimeout 设置当使用 StateServer 模式存储 session 状态时,经过多少秒空闲后,断开 Web 服务器与存储状态信息的服务器的 tcp/IP 连接的。默认值是 10 秒钟。


asp.NET 中客户端 session 状态的存储


  在我们上面的 session 模型简介中,大家可以发现 session 状态应该存储在两个地方,分别是客户端和服务器端。客户端只负责保存相应网站的 SessionID ,而其他的 session 信息则保存在服务器端。在 asp 中,客户端的 SessionID 实际是以 Cookie 的形式存储的。如果用户在浏览器的设置中选择了禁用 Cookie ,那末他也就无法享受 session 的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在 asp.NET 中客户端的 session 信息存储方式分为: Cookie 和 Cookieless 两种。


   asp.NET 中,默认状态下,在客户端还是使用 Cookie 存储 session 信息的。如果我们想在客户端使用 Cookieless 的方式存储 session 信息的方法如下:


  找到当前 Web 应用程序的根目录,打开 Web.Config 文件,找到如下段落:

< sessionState
 
   
 mode="InProc"
 
   
 stateConnectionString="tcpip=127.0.0.1:42424"
 
   
 sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
 
   
 cookieless="false"
 
   
 timeout="20" 
 
/>
 
  这段话中的 
 cookieless="false" 
 改为: 
 cookieless="true" 
 ,这样,客户端的 
 session 
 信息就不再使用 
  Cookie 
 存储了,而是将其通过 
 URL 
 存储。关闭当前的 
 IE 
 ,打开一个新 
 IE 
 ,重新访问刚才的 
 Web 
 应用程序,就会看到类似下面的样子:
 
其中, 
 http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245) /default.aspx 
 中黑体标出的就是客户端的 
 session ID 
 。注意,这段信息是由 
 IIS 
 自动加上的,不会影响以前正常的连接。
 
asp.NET 
 中服务器端 
 session 
 状态的存储 
 准备工作:
 
  为了您能更好的体验到实验现象,您可以建立一个叫做 
 SessionState.aspx 
 的页面,然后把以下这些代码添加到 
 < body>< /body> 
 中。
 
< scriptrunat="server">
 
Sub Session_Add(sender As Object, e As EventArgs)
 
  
  session("MySession") = text1.Value
 
  
  span1.InnerHtml = "Session data updated! < P>Your session contains: < font color=red>" & session("MySession"). ToString() & "< /font>"
 
End Sub
 
Sub CheckSession(sender As Object, eAs EventArgs)
 
  
  If (Session("MySession")Is Nothing) Then
 
    
  span1.InnerHtml = "NOTHING, session DATA LOST!"
 
  
  Else
 
    
  span1.InnerHtml = "Your session contains: < font color= red>" & session("MySession").ToString() & "<   /font>"
 
End If
 
End Sub
 
< /script>
 
< formrunat="server"id="Form2">
 
  
  < inputid="text1"type="text"runat="server"name="text1">
 
  
  < inputtype="submit"runat="server"OnServerClick="Session_Add"
 
      
  value="Add to session State " id="Submit1"name="Submit1">
 
  
  < inputtype="submit"runat="server"OnServerClick="CheckSession"
 
      
  value=" View session State " id="Submit2"name="Submit2">
 
< /form>
 
< hrsize="1">
 
< fontsize="6">< spanid="span1"runat="server" />< /font> 
 
  这个 
 SessionState.aspx 
 的页面可以用来测试在当前的服务器上是否丢失了 
 session 
 信息。
 
将服务器 
 session 
 信息存储在进程中
 
  让我们来回到 
 Web.config 
 文件的刚才那段段落中:
 
< sessionState
 
   
 mode="InProc"
 
   
 stateConnectionString="tcpip=127.0.0.1:42424"
 
   
 sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
 
   
 cookieless="false"
 
   
 timeout="20" 
 
/>


   mode 的值是 InProc 时, 说明服务器正在使用这种模式。


  这种方式和以前 asp 中的模式一样,就是服务器将 session 信息存储在 IIS 进程中。当 IIS 关闭、重起后,这些信息都会丢失。但是这种模式也有自己最大好处,就是性能最高。应为所有的 session 信息都存储在了 IIS 的进程中,所以 IIS 能够很快的访问到这些信息,这种模式的性能比进程外存储 session 信息或是在 sql server 中存储 session 信息都要快上很多。这种模式也是 asp.NET 的默认方式。


  好了,现在让我们做个试验。打开刚才的 SessionState.aspx 页面,随便输入一些字符,使其存储在 session 中。然后,让我们让 IIS 重起。注意,并不是使当前的站点停止再开始,而是在 IIS 中本机的机器名的节点上点击鼠标右键,选择重新启动 IIS 。 ( 想当初使用 NT4 时,重新启动 IIS 必须要重新启动计算机才行,微软真是 @#$%^&) 返回到 SessionState.aspx 页面中,检查刚才的 session 信息,发现信息已经丢失了。