回忆一下Session会话的种类,默认有三种模式[1:InProc(进程内会话), 2:StateServer(进程外会话), 3:SqlServer(SqlServer会话)],还有一种是需要由自己扩展的,使用的可能性比较小,所以不回顾了。
1:InProc 进程内会话
Web.config配置文件
<system.web>
<sessionState cookieName="XX" mode="InProc"></sessionState>
<\system.web>
使用此模式时,会话保存在HttpAppliction进程中。想到于保存在一块内存。
2:StateServer 进程外会话
Web.config配置文件
<system.web>
<sessionState cookieName="XX" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"></sessionState>
<\system.web>
使用此模式时,会话保存在aspnet_state.exe的windows服务实例中,aspnet_state服务的cmd启动命令:net start aspnet_state。
stateConnectionString指定保存会话的服务器
2:SqlServer会话
Web.config配置文件
<system.web>
<sessionState cookieName="XXX" mode="SQLServer" sqlConnectionString="data source=XXXX;user id=XXX;password=XXX;"></sessionState>
<\system.web>
使用此模式时,会话保存在SqlServer数据库中(ASPState)。分别保存在ASPStateTempApplications和ASPStateTempSessions表中。
使用aspnet_regsql.exe
创建命令aspnet_regsql -$ XXXX(Data Source) -U XXX(User Id) -P XXX(Password) -ssadd -sstype p
此处使用默认数据库,还可以通过指定自定义数据库进行会话保持。
最后补充说明:除去进程中模式以外,其他模式给Session会话赋值的引用类型变量必须都支持可序列化[Serializable]