本文介绍了asp.net中客户端Session状态的存储和asp.net中服务器端Session状态的存储。通过这篇文章,你可以看到在asp.net session的管理和维护上,asp.net比asp有了很大的进步。

ASP.NET中客户端Session状况的存储

在咱们上面的ASP.NET Session模型简介中,咱们能够发现Session状况应该存储在两个当地,分别是客户端和服务器端。客户端只担任保存相应网站的SessionID,而其他的Session信息则保存在服务器端。在ASP中,客户端的SessionID实践是以Cookie的办法存储的。假如用户在浏览器的设置中选择了禁用Cookie,那末他也就无法享用Session的便当之处了,乃至形成不能拜访某些网站。为了处理以上问题,在asp.net中客户端的Session信息存储办法分为:Cookie和Cookieless两种。

asp.net中,默许状况下,在客户端仍是运用Cookie存储Session信息的。假如咱们想在客户端运用Cookieless的办法存储Session信息的办法如下:

找到当时Web应用程序的根目录,翻开Web.Config文件,找到如下阶段:

  1. <sessionState
  2.   mode="InProc"
  3.   stateConnectionString="tcpip=127.0.0.1:42424"
  4.   sqlConnectionString="datasource=127.0.0.1;Trusted_Connection=yes"
  5.   cookieless="false"
  6.   timeout="20"
  7. />

这段话中的cookieless="false"改为:cookieless="true",这样,客户端的Session信息就不再运用Cookie存储了,而是将其经过URL存储。封闭当时的IE,翻开一个新IE,从头拜访方才的Web应用程序,就会看到相似下面的姿态:

ASP.NET Session 状况的存储(asp.net session用法)  第1张

其间,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx中黑体标出的便是客户端的Session ID。留意,这段信息是由IIS主动加上的,不会影响曾经正常的衔接。

asp.net中服务器端Session状况的存储

准备工作

为了您能更好的体验到实验现象,您能够树立一个叫做SessionState.aspx的页面,然后把以下这些代码增加到< body>< /body>中。

  1. <scriptrunat="server">
  2. SubSession_Add(senderAsObject,eAsEventArgs)
  3.  Session("MySession")=text1.Value
  4.  span1.InnerHtml="Sessiondataupdated!<P>Yoursessioncontains:<fontcolor=red>"&\
  5.           Session("MySession").ToString()&"</font>"
  6. EndSub
  7. SubCheckSession(senderAsObject,eAsEventArgs)
  8.  If(Session("MySession")IsNothing)Then
  9.    span1.InnerHtml="NOTHING,SESSIONDATALOST!"
  10.  Else
  11.    span1.InnerHtml="Yoursessioncontains:<fontcolor=red>"&\
  12.             Session("MySession").ToString()&"</font>"
  13. EndIf
  14. EndSub
  15. </script>
  16. <formrunat="server"id="Form2">
  17.  <inputid="text1"type="text"runat="server"name="text1">
  18.  <inputtype="submit"runat="server"OnServerClick="Session_Add"
  19.      value="AddtoSessionState"id="Submit1"name="Submit1">
  20.  <inputtype="submit"runat="server"OnServerClick="CheckSession"
  21.      value="ViewSessionState"id="Submit2"name="Submit2">
  22. </form>
  23. <hrsize="1">
  24. <fontsize="6"><spanid="span1"runat="server"/></font>

这个SessionState.aspx的页面能够用来测验在当时的服务器上是否丢掉了Session信息。

将服务器Session信息存储在进程中

让咱们来回到Web.config文件的方才那段阶段中:

  1. <sessionState
  2.   mode="InProc"
  3.   stateConnectionString="tcpip=127.0.0.1:42424"
  4.   sqlConnectionString="datasource=127.0.0.1;Trusted_Connection=yes"
  5.   cookieless="false"
  6.   timeout="20"
  7. />

当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信息,发现信息现已丢掉了。

将服务器Session信息存储在进程外

首要,让咱们来翻开办理工具->服务,找到名为:asp.net State Service的服务,发动它。实践上,这个服务便是发动一个要保存Session信息的进程。发动这个服务后,你能够从Windows使命办理器->进程中看到一个名为aspnet_state.exe的进程,这个便是咱们保存Session信息的进程。

然后,回到Web.config文件中上述的阶段中,将mode的值改为StateServer。保存文件后的从头翻开一个IE,翻开SessionState.aspx页面,保存一些信息到Session中。这时,让咱们重起IIS,再回到SessionState.aspx页面中检查方才的Session信息,发现没有丢掉。

实践上,这种将ASP.NET Session信息存储在进程外的办法不但指能够将信息存储在本机的进程外,还能够将Session信息存储在其他的服务器的进程中。这时,不但需求将mode的值改为StateServer,还需求在stateConnectionString中装备相应的参数。例如你的核算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的核算机的进程中,就需求设置成这样:stateConnectionString="tcpip=192.168.0.2:42424"。当然,不要忘记在192.168.0.2的核算机中装上.NET Framework,并且发动asp.net State Services服务。

将服务器Session信息存储在SQL Server中

首要,仍是让咱们来做一些准备工作。发动SQL Server和SQL Server署理服务。在SQL Server中履行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创立一个用来专门存储Session信息的数据库,及一个保护Session信息数据库的SQL Server署理作业。咱们能够在以下途径中找到那个文件:

[system drive]\winnt\Microsoft.NET\Framework\[version]\

然后翻开查询分析器,衔接到SQL Server服务器,翻开方才的那个文件并且履行。稍等片刻,数据库及作业就树立好了。这时,你能够翻开企业办理器,看到新增了一个叫ASPState的数据库。可是这个数据库中仅仅些存储进程,没有用户表。实践上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中的,别的一个ASPStateTempApplications表存储了ASP中Application目标信息。这两个表也是方才的那个脚本树立的。别的检查办理->SQL Server署理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实践上便是每分钟去ASPStateTempSessions表中删去过期的Session信息的。

接着,咱们返回到Web.config文件,修正mode的值改为SQLServer。留意,还要一起修正sqlConnectionString的值,格局为:

  1. sqlConnectionString="datasource=localhost;IntegratedSecurity=SSPI;"

其间data source是指SQL Server服务器的IP地址,假如SQL Server与IIS是一台机子,写127.0.0.1就行了。Integrated Security=SSPI的意思是运用Windows集成身份验证,这样,拜访数据库将以asp.net的身份进行,经过如此装备,能够取得比运用userid=sa;password=口令的SQL Server验证办法更好的安全性。当然,假如SQL Server运转于另一台核算机上,你可能会需求经过Active Directory域的办法来保护两头验证的一致性。

相同,让咱们做个实验。向SessionState.aspx中增加Session信息,这时发现Session信息现已存在SQL Server中了,即便你重起核算机,方才的Session信息也不会丢掉。现在,你现已彻底看见了Session信息究竟是什么姿态的了,并且又是存储在SQL Server中的,精干什么就看你的发挥了。

经过这篇文章,你能够看到在asp.net Session的办理和保护上,asp.net比asp有了很大的前进,咱们能够愈加随意的选择合适的办法了。

【修改引荐】

  1. ASP.NET Session 模型简述
  2. ASP.NET页生命周期介绍:阶段,事情及其他
  3. ASP.NET MVC生命周期介绍
  4. 处理ASP.NET Session失效的几个办法
  5. ASP.NET:一切实例同享一个static变量

转载请说明出处
知优网 » ASP.NET Session 状况的存储(asp.net session用法)

发表评论

您需要后才能发表评论