ASPNET提供了Session对象,从而允许程序员识别、存储和处理同一个浏览器对象对服务器上某个特定网络应用程序的若干次请求的上下文信息。Session对应浏览器与服务器的同一次对话,在浏览器第一请求网络应用程序的某个页面时,服务器会触发Session_onStart事件;在对话超时或者被关闭的时候会触发Session_onEnd
事件。程序员可以在代码中响应这两个事件来处理与同一次对话相关的任务,如开辟和释放该次对话要使用的资源等。
在ASPNET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者Readonly,并且在webconfig文件中正确的设置了SessionState属性。
ASPNET中Session的状态保持是由webconfig文件中的标记下的标记的mode属性来决定的。该属性有四种可能的值:Off、Inproc、StateServer和SQlServer
设为Off会禁用Session
Inproc是缺省的设置,这种模式和以前的ASP的会话状态的方法是类似的,会话的状态会被保存在ASPNET进程中,它的优点是显而易见的:性能。进程内的数据访问自然会比夸进程的访问快。然而,这种方法Session的状态依赖于ASPNET进程,当IIS进程崩溃或者正常重起启时,保存在进程中的状态将丢失。
为了克服Inproc模式的缺点,ASPNET提供了两种进程外保持会话状态的方法。
ASPNET首先提供了提供了一个Windows服务:ASPState,这个服务启动后,ASPNET应用程序可以将mode属性设置为“SateServer”,来使用这个Windows服务提供的状态管理方法。
除了在webconfig文件中设置mode属性为StateServer外,还必须设置运行StateServer服务器的IP地址和端口号如果在IIS所在的机器运行StateServer则IP地址就是127001,端口号通常是42424配置如下:
mode=”StateServer”
stateConnectionString="tcpip=127001:42424"
使用这种模式,会话状态的存储将不依赖IIS进程的失败或者重启,会话的状态将存储在StateServer进程的内存空间中。
另一种会话状态模式是SQLServer模式。这种模式是将会话的状态保存在SQL
Server数据库中的。使用这种模式前,必须至少有一台SQL
Server服务器,并在服务器中建立需要的表和存储过程。NET
SDK提供了两个脚本来简化这个工作:InstallSqlStatesql和UnInstallSqlStatesql。这两国文件存放在下面路径中:
WinntMicrosoftNETFramework
要配置SQL
Server
服务器,可以在命令行中运行SQL
Server提供的命令行工具osqlexe
osql
-s
[server
name]
-u
[user]
-p
[password]
例如:
osql
-s
(local)
-u
as
-p
“”-i
InstallSqlStatesql
做好必要的数据库准备工作后,将webconfig文件中的sessionstate元素的mode属性改为”sqlserver”,并指定SQL连接字符串。具体如下:
mode="SQLServer"
sqlConnectionString="data
source=127001;userid=sa;password=;Trusted_Connection=yes"
使用SQLServer模式处了可以使Session的状态不依赖于IIS服务器之外,还可以利用SQL
Server的集群,使状态存储不依赖于单个的SQL
Server,这样就可以为应用程序提供极大的可靠性。
aspnet中,session默认以inproc模式存储,也就是保存在iis进程中,这样有个优点就是效率高,但不利于为本负载均衡扩展。可以把session信息保存在SQL Server中,据说,该种方式比起inproc性能损失为10%-20%。如何实现呢,主要分两步介绍:
1、初始化SQL Server中的状态数据库
ASPNET SQL Server 提供注册工具Aspnet_regsqlexe,用于创建供 ASPNET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 数据库。Aspnet_regsqlexe位于 /%windir%/MicrosoftNET/Framework/<versionNumber>/aspnet_regsqlexe 目录下。如果麻烦,可以 直接用visual studio tools 的命令提示工具中直接输入aspnet_regsqlexe使用。用法如下:
Aspnet_regsqlexe <options>
可以用如下的语法来添加默认session数据库ASPState
aspnet_regsqlexe -S localhost -U sa -P why1234 -ssadd -sstype p
-S,-U/-P
必须是大写,分别表示数据库服务器,用户名和密码。
-ssadd / –ssremove 参数:
-ssadd表示是添加Session数据库, -ssremove表示移除Session数据库
创建自定义数据库myAppState,可以用如下的语法:
aspnet_regsqlexe -S localhost -U sa -P why1234 -ssadd -sstype c -d myAppState
2、配置webconfig
在webconfig的 <systemweb>节下添加如下配置:
<sessionState mode="SQLServer" sqlConnectionString="server=localhost; uid=sa; pwd=123456;"/>
如果在初始化数据库的时候,创建了自定义数据库可以用类似于如下的的配置:
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=localhost; DataBase=myAspState;uid=sa; pwd=123456;"/>
通过以上两步的设置,已经可以了。详细情况请参阅msdn。
以上就是关于ASP.NET中Session的状态保持方式全部的内容,包括:ASP.NET中Session的状态保持方式、java,如何把session保存到数据库里面、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)